home *** CD-ROM | disk | FTP | other *** search
/ Aminet 23 / Aminet 23 (1998)(GTI - Schatztruhe)[!][Feb 1998].iso / Aminet / misc / emu / amiSPIMsrc.lha / Tests / tt.le.s < prev   
Text File  |  1994-01-17  |  55KB  |  4,119 lines

  1. # SPIM S20 MIPS simulator.
  2. # A torture test for the SPIM simulator.
  3. # Copyright (C) 1990-1994 James Larus, larus@cs.wisc.edu.
  4. # ALL RIGHTS RESERVED.
  5. #
  6. # SPIM is distributed under the following conditions:
  7. #
  8. # You may make copies of SPIM for your own use and modify those copies.
  9. #
  10. # All copies of SPIM must retain my name and copyright notice.
  11. #
  12. # You may not sell SPIM or distributed SPIM in conjunction with a commerical
  13. # product or service without the expressed written consent of James Larus.
  14. #
  15. # THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
  16. # IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  17. # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
  18. # PURPOSE.
  19. #
  20.  
  21. # $Header: /home/primost/larus/Software/SPIM/Tests/RCS/tt.le.s,v 1.41 1994/01/18 03:23:44 larus Exp larus $
  22.  
  23.  
  24.     .data
  25. saved_ret_pc:    .word 0        # Holds PC to return from main
  26. m3:    .asciiz "The next few lines should contain exception error messages\n"
  27. m4:    .asciiz "Done with exceptions\n\n"
  28.     .text
  29.     .globl main
  30. main:
  31.     sw $31 saved_ret_pc
  32.  
  33. #
  34. # The first thing to do is to test the exceptions:
  35. #
  36.     li $v0 4    # syscall 4 (print_str)
  37.     la $a0 m3
  38.     syscall
  39.  
  40. # Exception 1 (INT) -- Not implemented yet
  41. # Exception 4 (ADEL)
  42.     li $t0 0x400000
  43.     lw $3 1($t0)
  44. # Exception 5 (ADES)
  45.     sw $3 1($t0)
  46. # Exception 6 (IBUS) -- Can't test and continue
  47. # Exception 7 (DBUS)
  48.     lw $3 1000000($sp)
  49. # Exception 8 (SYSCALL) -- Not implemented
  50. # Exception 9 (BKPT)
  51.     break 0
  52. # Exception 10 (RI) -- Not implemented (can't enter bad instructions)
  53. # Exception 12 (overflow)
  54.     lui $t0 0x7fffffff
  55.     add $t0 $t0 $t0
  56.     li $v0 4    # syscall 4 (print_str)
  57.     la $a0 m4
  58.     syscall
  59.  
  60. #
  61. # Try modifying R0
  62. #
  63.     add $0, $0, 1
  64.     bnez $0 fail
  65.  
  66. #
  67. # Now, test each instruction
  68. #
  69.  
  70.     .data
  71. add_:    .asciiz "Testing ADD\n"
  72.     .text
  73.     li $v0 4    # syscall 4 (print_str)
  74.     la $a0 add_
  75.     syscall
  76.  
  77.     li $2 1
  78.     li $3 -1
  79.  
  80.     add $4, $0, $0
  81.     bnez $4 fail
  82.     add $4, $0, $2
  83.     bne $4 1 fail
  84.     add $4, $4, $3
  85.     bnez $4 fail
  86.  
  87.  
  88.     .data
  89. addi_:    .asciiz "Testing ADDI\n"
  90.     .text
  91.     li $v0 4    # syscall 4 (print_str)
  92.     la $a0 addi_
  93.     syscall
  94.  
  95.     addi $4, $0, 0
  96.     bnez $4 fail
  97.     addi $4, $0, 1
  98.     bne $4 1 fail
  99.     addi $4, $4, -1
  100.     bnez $4 fail
  101.  
  102.  
  103.     .data
  104. addiu_:    .asciiz "Testing ADDIU\n"
  105.     .text
  106.     li $v0 4    # syscall 4 (print_str)
  107.     la $a0 addiu_
  108.     syscall
  109.  
  110.     addiu $4, $0, 0
  111.     bnez $4 fail
  112.     addiu $4, $0, 1
  113.     bne $4 1 fail
  114.     addiu $4, $4, -1
  115.     bnez $4 fail
  116.  
  117.     lui $2 0x7fffffff
  118.     addiu $2 $2 0x7fffffff    # should not trap
  119.     bne $2 -2 fail
  120.  
  121.  
  122.     .data
  123. addu_:    .asciiz "Testing ADDU\n"
  124.     .text
  125.     li $v0 4    # syscall 4 (print_str)
  126.     la $a0 addu_
  127.     syscall
  128.  
  129.     li $2 1
  130.     li $3 -1
  131.  
  132.     addu $4, $0, $0
  133.     bnez $4 fail
  134.     addu $4, $0, $2
  135.     bne $4 1 fail
  136.     addu $4, $4, $3
  137.     bnez $4 fail
  138.  
  139.     lui $2 0x7fffffff
  140.     addu $2 $2 $2        # should not trap
  141.     bne $2 -2 fail
  142.  
  143.  
  144.     .data
  145. and_:    .asciiz "Testing AND\n"
  146.     .text
  147.     li $v0 4    # syscall 4 (print_str)
  148.     la $a0 and_
  149.     syscall
  150.  
  151.     li $2 1
  152.     li $3 -1
  153.  
  154.     and $4 $0 $0
  155.     bnez $4 fail
  156.     and $4 $2 $2
  157.     beqz $4 fail
  158.     and $4 $2 $3
  159.     bne $4 1 fail
  160.  
  161.  
  162.     .data
  163. andi_:    .asciiz "Testing ANDI\n"
  164.     .text
  165.     li $v0 4    # syscall 4 (print_str)
  166.     la $a0 andi_
  167.     syscall
  168.  
  169.     li $2 1
  170.     li $3 -1
  171.  
  172.     andi $4 $0 0
  173.     bnez $4 fail
  174.     and $4 $2 1
  175.     beqz $4 fail
  176.     and $4 $2 -1
  177.     bne $4 1 fail
  178.     and $4 $3 -1
  179.     bne $4 $3 fail
  180.  
  181.  
  182.     .data
  183. beq_:    .asciiz "Testing BEQ\n"
  184.     .text
  185.     li $v0 4    # syscall 4 (print_str)
  186.     la $a0 beq_
  187.     syscall
  188.  
  189.     li $2 -1
  190.     li $3 1
  191.  
  192.     beq $0 $0 l1
  193.     j fail
  194. l1:    beq $2 $2 l2
  195.     j fail
  196. l2:    beq $3 $2 fail
  197.  
  198.     beq $2 $2 far_away    # Check long branch
  199.     j fail
  200. come_back:
  201.  
  202.     li $2 3
  203. l2_1:    sub $2 $2 1
  204.     bnez $2, l2_1
  205.  
  206.  
  207.     .data
  208. bgez_:    .asciiz "Testing BGEZ\n"
  209.     .text
  210.     li $v0 4    # syscall 4 (print_str)
  211.     la $a0 bgez_
  212.     syscall
  213.  
  214.     li $2 -1
  215.     li $3 1
  216.  
  217.     bgez $0 l3
  218.     j fail
  219. l3:    bgez $3 l4
  220.     j fail
  221. l4:    bgez $2 fail
  222.  
  223.  
  224.     .data
  225. bgezal_:.asciiz "Testing BGEZAL\n"
  226.     .text
  227.     li $v0 4    # syscall 4 (print_str)
  228.     la $a0 bgezal_
  229.     syscall
  230.  
  231.     li $2 -1
  232.     li $3 1
  233.  
  234.     bgezal $0 l5
  235.     j fail
  236.     bgezal $2 fail
  237. l5:    bgezal $3 l6
  238. l55:    j fail
  239. l6:    la $4 l55
  240.     bne $31 $4 fail
  241.  
  242.  
  243.     .data
  244. bgtz_:    .asciiz "Testing BGTZ\n"
  245.     .text
  246.     li $v0 4    # syscall 4 (print_str)
  247.     la $a0 bgtz_
  248.     syscall
  249.  
  250.     li $2 -1
  251.     li $3 1
  252.  
  253.     bgtz $0 fail
  254. l7:    bgtz $3 l8
  255.     j fail
  256. l8:    bgtz $2 fail
  257.  
  258.  
  259.     .data
  260. blez_:    .asciiz "Testing BLEZ\n"
  261.     .text
  262.     li $v0 4    # syscall 4 (print_str)
  263.     la $a0 blez_
  264.     syscall
  265.  
  266.     li $2 -1
  267.     li $3 1
  268.  
  269.     blez $0 l9
  270.     j fail
  271. l9:    blez $2 l10
  272.     j fail
  273. l10:    blez $3 fail
  274.  
  275.  
  276.     .data
  277. bltz_:    .asciiz "Testing BLTZ\n"
  278.     .text
  279.     li $v0 4    # syscall 4 (print_str)
  280.     la $a0 bltz_
  281.     syscall
  282.  
  283.     li $2 -1
  284.     li $3 1
  285.  
  286.     bltz $0 fail
  287. l11:    bltz $2 l12
  288.     j fail
  289. l12:    bltz $3 fail
  290.  
  291.  
  292.     .data
  293. bltzal_:.asciiz "Testing BLTZAL\n"
  294.     .text
  295.     li $v0 4    # syscall 4 (print_str)
  296.     la $a0 bltzal_
  297.     syscall
  298.  
  299.     li $2 -1
  300.     li $3 1
  301.  
  302.     bltzal $0 fail
  303.     bltzal $3 fail
  304. l13:    bltzal $2 l15
  305. l14:    j fail
  306. l15:    la $4 l14
  307.     bne $31 $4 fail
  308.  
  309.  
  310.     .data
  311. bne_:    .asciiz "Testing BNE\n"
  312.     .text
  313.     li $v0 4    # syscall 4 (print_str)
  314.     la $a0 bne_
  315.     syscall
  316.  
  317.     li $2 -1
  318.     li $3 1
  319.  
  320.     bne $0 $0 fail
  321.     bne $2 $2 fail
  322.     bne $3 $2 l16
  323. l16:
  324.  
  325.  
  326.     .data
  327. break_:    .asciiz "Testing BREAK\nExpect a exception message:\n  "
  328.     .text
  329.     li $v0 4    # syscall 4 (print_str)
  330.     la $a0 break_
  331.     syscall
  332.  
  333.     break 3
  334.  
  335.  
  336. # COPz is not implemented or checked
  337.  
  338.  
  339.     .data
  340. ccp_:    .asciiz "Testing move to/from coprocessor control z\n"
  341.     .text
  342.     li $v0 4    # syscall 4 (print_str)
  343.     la $a0 ccp_
  344.     syscall
  345.  
  346.     li $2 0x7f7f
  347.     ctc0 $2 $3
  348.     cfc0 $4 $3
  349.     bne $2 $4 fail
  350.     li $2 0x7f7f
  351.     ctc1 $2 $3
  352.     cfc1 $4 $3
  353.     bne $2 $4 fail
  354.     li $2 0x7f7f
  355.     ctc2 $2 $3
  356.     cfc2 $4 $3
  357.     bne $2 $4 fail
  358.     li $2 0x7f7f
  359.     ctc3 $2 $3
  360.     cfc3 $4 $3
  361.     bne $2 $4 fail
  362.  
  363.  
  364.     .data
  365. div_:    .asciiz "Testing DIV\n"
  366. div2_:    .asciiz "Expect exception caused by divide by 0:\n  "
  367.     .text
  368.     li $v0 4    # syscall 4 (print_str)
  369.     la $a0 div_
  370.     syscall
  371.  
  372.     li $2 4
  373.     li $3 2
  374.     li $4 -2
  375.  
  376.     div $5 $2 $3
  377.     bne $5 2 fail
  378.     mfhi $5
  379.     bne $5 0 fail
  380.  
  381.     div $5 $2 $4
  382.     bne $5 -2 fail
  383.     mfhi $5
  384.     bne $5 0 fail
  385.  
  386.     li $v0 4    # syscall 4 (print_str)
  387.     la $a0 div2_
  388.     syscall
  389.     div $5 $2 $0
  390.  
  391.  
  392.     .data
  393. divu_:    .asciiz "Testing DIVU\n"
  394. divu2_:    .asciiz "Expect exception caused by divide by 0:\n  "
  395.     .text
  396.     li $v0 4    # syscall 4 (print_str)
  397.     la $a0 divu_
  398.     syscall
  399.  
  400.     li $2 4
  401.     li $3 2
  402.     li $4 -2
  403.  
  404.     divu $5 $2 $3
  405.     bne $5 2 fail
  406.     mfhi $5
  407.     bne $5 0 fail
  408.  
  409.     divu $0 $2 $3
  410.     mflo $5
  411.     bne $5 2 fail
  412.     mfhi $5
  413.     bne $5 0 fail
  414.  
  415.     divu $5 $2 $4
  416.     bne $5 0 fail
  417.     mfhi $5
  418.     bne $5 4 fail
  419.  
  420.     li $v0 4    # syscall 4 (print_str)
  421.     la $a0 divu2_
  422.     syscall
  423.     divu $5 $2 $0
  424.  
  425.  
  426.     .data
  427. j_:    .asciiz "Testing J\n"
  428.     .text
  429.     li $v0 4    # syscall 4 (print_str)
  430.     la $a0 j_
  431.     syscall
  432.  
  433.     j l17
  434.     j fail
  435. l17:
  436.  
  437.  
  438.     .data
  439. jal_:    .asciiz "Testing JAL\n"
  440.     .text
  441.     li $v0 4    # syscall 4 (print_str)
  442.     la $a0 jal_
  443.     syscall
  444.  
  445.     jal l18
  446. l19:    j l20
  447. l18:    la $4 l19
  448.     bne $31 $4 fail
  449.     jr $31
  450. l20:
  451.  
  452.  
  453.     .data
  454. jalr_:    .asciiz "Testing JALR\n"
  455. jalr2_:    .asciiz "Expect an non-word boundary exception:\n  "
  456.     .text
  457.     li $v0 4    # syscall 4 (print_str)
  458.     la $a0 jalr_
  459.     syscall
  460.  
  461.     la $2 l21
  462.     jalr $3, $2
  463. l23:    j l22
  464. l21:    la $4 l23
  465.     bne $3 $4 fail
  466.     jr $3
  467. l22:    li $v0 4    # syscall 4 (print_str)
  468.     la $a0 jalr2_
  469.     syscall
  470.     la $2 l24
  471.     add $2 $2 2
  472. l24:    jalr $3 $2
  473.  
  474.  
  475.     .data
  476. jr_:    .asciiz "Testing JR\n"
  477. jr2_:    .asciiz "Expect an non-word boundary exception:\n  "
  478.     .text
  479.     li $v0 4    # syscall 4 (print_str)
  480.     la $a0 jr_
  481.     syscall
  482.  
  483.     la $2 l25
  484.     jr $2
  485.     j fail
  486. l25:    li $v0 4    # syscall 4 (print_str)
  487.     la $a0 jr2_
  488.     syscall
  489.     la $2 l27
  490.     add $2 $2 2
  491. l27:    jr $2
  492.  
  493.  
  494.     .data
  495. la_:    .asciiz "Testing LA\n"
  496.     .text
  497.     li $v0 4    # syscall 4 (print_str)
  498.     la $a0 la_
  499.     syscall
  500.  
  501.     # Simple cases already tested
  502.     li $4 101
  503.     la $5 10($4)
  504.     bne $5 111 fail
  505.  
  506.  
  507.     .data
  508. lb_:    .asciiz "Testing LB\n"
  509. lb2_:    .asciiz "Expect an address error exceptions:\n  "
  510. lbd_:    .byte 1, -1, 0, 128
  511. lbd1_:    .word 0x76543210, 0xfedcba98
  512.     .text
  513.     li $v0 4    # syscall 4 (print_str)
  514.     la $a0 lb_
  515.     syscall
  516.  
  517.     la $2 lbd_
  518.     lb $3 0($2)
  519.     bne $3 1 fail
  520.     lb $3 1($2)
  521.     bne $3 -1 fail
  522.     lb $3 2($2)
  523.     bne $3 0 fail
  524.     lb $3 3($2)
  525.     bne $3 0xffffff80 fail
  526.  
  527.     la $t0 lbd1_
  528.     lb $t1 0($t0)
  529.     bne $t1 0x10 fail
  530.     lb $t1 1($t0)
  531.     bne $t1 0x32 fail
  532.     lb $t1 2($t0)
  533.     bne $t1 0x54 fail
  534.     lb $t1 3($t0)
  535.     bne $t1 0x76 fail
  536.     lb $t1 4($t0)
  537.     bne $t1 0xffffff98 fail
  538.     lb $t1 5($t0)
  539.     bne $t1 0xffffffba fail
  540.     lb $t1 6($t0)
  541.     bne $t1 0xffffffdc fail
  542.     lb $t1 7($t0)
  543.     bne $t1 0xfffffffe fail
  544.  
  545.     li $v0 4    # syscall 4 (print_str)
  546.     la $a0 lb2_
  547.     syscall
  548.  
  549.     lb $3 1000000($sp)
  550.  
  551.     .data
  552. lbu_:    .asciiz "Testing LBU\n"
  553.     .text
  554.     li $v0 4    # syscall 4 (print_str)
  555.     la $a0 lbu_
  556.     syscall
  557.  
  558.     la $2 lbd_
  559.     lbu $3 0($2)
  560.     bne $3 1 fail
  561.     lbu $3 1($2)
  562.     bne $3 0xff fail
  563.     lbu $3 2($2)
  564.     bne $3 0 fail
  565.     lbu $3 3($2)
  566.     bne $3 128 fail
  567.  
  568.     la $t0 lbd1_
  569.     lbu $t1 0($t0)
  570.     bne $t1 0x10 fail
  571.     lbu $t1 1($t0)
  572.     bne $t1 0x32 fail
  573.     lbu $t1 2($t0)
  574.     bne $t1 0x54 fail
  575.     lbu $t1 3($t0)
  576.     bne $t1 0x76 fail
  577.     lbu $t1 4($t0)
  578.     bne $t1 0x98 fail
  579.     lbu $t1 5($t0)
  580.     bne $t1 0xba fail
  581.     lbu $t1 6($t0)
  582.     bne $t1 0xdc fail
  583.     lbu $t1 7($t0)
  584.     bne $t1 0xfe fail
  585.  
  586.     li $v0 4    # syscall 4 (print_str)
  587.     la $a0 lb2_
  588.     syscall
  589.  
  590.     lbu $3 1000000($sp)
  591.  
  592.  
  593.     .data
  594. ld_:    .asciiz "Testing LD\n"
  595. ld2_:    .asciiz "Expect four address error exceptions:\n"
  596. ldd_:    .word 1, -1, 0, 0x8000000
  597.     .text
  598.     li $v0 4    # syscall 4 (print_str)
  599.     la $a0 ld_
  600.     syscall
  601.  
  602.     la $2 ldd_
  603.     ld $3 0($2)
  604.     bne $3 1 fail
  605.     bne $4 -1 fail
  606.     ld $3 8($2)
  607.     bne $3 0 fail
  608.     bne $4 0x8000000 fail
  609.  
  610.     li $v0 4    # syscall 4 (print_str)
  611.     la $a0 ld2_
  612.     syscall
  613.  
  614.     ld $3 1000000($sp)
  615.     ld $3 1000001($sp)
  616.  
  617.  
  618.     .data
  619. lh_:    .asciiz "Testing LH\n"
  620. lh2_:    .asciiz "Expect two address error exceptions:\n"
  621. lhd_:    .half 1, -1, 0, 0x8000
  622.     .text
  623.     li $v0 4    # syscall 4 (print_str)
  624.     la $a0 lh_
  625.     syscall
  626.  
  627.     la $2 lhd_
  628.     lh $3 0($2)
  629.     bne $3 1 fail
  630.     lh $3 2($2)
  631.     bne $3 -1 fail
  632.     lh $3 4($2)
  633.     bne $3 0 fail
  634.     lh $3 6($2)
  635.     bne $3 0xffff8000 fail
  636.  
  637.     li $v0 4    # syscall 4 (print_str)
  638.     la $a0 lh2_
  639.     syscall
  640.  
  641.     lh $3 1000000($sp)
  642.     lh $3 1000001($sp)
  643.  
  644.     .data
  645. lhu_:    .asciiz "Testing LHU\n"
  646.     .text
  647.     li $v0 4    # syscall 4 (print_str)
  648.     la $a0 lhu_
  649.     syscall
  650.  
  651.     la $2 lhd_
  652.     lhu $3 0($2)
  653.     bne $3 1 fail
  654.     lhu $3 2($2)
  655.     bne $3 0xffff fail
  656.     lhu $3 4($2)
  657.     bne $3 0 fail
  658.     lhu $3 6($2)
  659.     bne $3 0x8000 fail
  660.  
  661.     li $v0 4    # syscall 4 (print_str)
  662.     la $a0 lh2_
  663.     syscall
  664.  
  665.     lhu $3 1000000($sp)
  666.     lhu $3 1000001($sp)
  667.  
  668.  
  669.     .data
  670. lui_:    .asciiz "Testing LUI\n"
  671.     .text
  672.     li $v0 4    # syscall 4 (print_str)
  673.     la $a0 lui_
  674.     syscall
  675.  
  676.     lui $2 0
  677.     bne $2 $0 fail
  678.     lui $2 1
  679.     srl $2 $2 16
  680.     addiu $2 $2 -1    # Don't do compare directly since it uses LUI
  681.     bne $2 $0 fail
  682.     lui $2 1
  683.     andi $2 $2 0xffff
  684.     bne $2 $0 fail
  685.     lui $2 -1
  686.     srl $2 $2 16
  687.     addiu $2 $2 1
  688.     andi $2 $2 0xffff
  689.     bne $2 $0 fail
  690.  
  691.  
  692.     .data
  693. lw_:    .asciiz "Testing LW\n"
  694. lwd_:    .word 1, -1, 0, 0x8000000
  695.     .text
  696.     li $v0 4    # syscall 4 (print_str)
  697.     la $a0 lw_
  698.     syscall
  699.  
  700.     la $2 lwd_
  701.     lw $3 0($2)
  702.     bne $3 1 fail
  703.     lw $3 4($2)
  704.     bne $3 -1 fail
  705.     lw $3 8($2)
  706.     bne $3 0 fail
  707.     lw $3 12($2)
  708.     bne $3 0x8000000 fail
  709.  
  710.     add $2 $2 12
  711.     lw $3 -12($2)
  712.     bne $3 1 fail
  713.     lw $3 -8($2)
  714.     bne $3 -1 fail
  715.     lw $3 -4($2)
  716.     bne $3 0 fail
  717.     lw $3 0($2)
  718.     bne $3 0x8000000 fail
  719.  
  720.     li $v0 4    # syscall 4 (print_str)
  721.     la $a0 lh2_
  722.     syscall
  723.  
  724.     lw $3 1000000($sp)
  725.     lw $3 1000001($sp)
  726.  
  727.  
  728.     .data
  729. lwl_:    .asciiz "Testing LWL\n"
  730.     .align 2
  731. lwld_:    .byte 0 1 2 3 4 5 6 7
  732.     .text
  733.     li $v0 4    # syscall 4 (print_str)
  734.     la $a0 lwl_
  735.     syscall
  736.  
  737.     la $2 lwld_
  738.     move $3 $0
  739.     lwl $3 0($2)
  740.     bne $3 0 fail
  741.     move $3 $0
  742.     lwl $3 1($2)
  743.     bne $3 0x01000000 fail
  744.     li $3 5
  745.     lwl $3 1($2)
  746.     bne $3 0x01000005 fail
  747.     move $3 $0
  748.     lwl $3 2($2)
  749.     bne $3 0x02010000 fail
  750.     li $3 5
  751.     lwl $3 2($2)
  752.     bne $3 0x02010005 fail
  753.     move $3 $0
  754.     lwl $3 3($2)
  755.     bne $3 0x03020100 fail
  756.     li $3 5
  757.     lwl $3 3($2)
  758.     bne $3 0x03020100 fail
  759.  
  760.     li $v0 4    # syscall 4 (print_str)
  761.     la $a0 lh2_
  762.     syscall
  763.  
  764.     lwl $3 1000000($sp)
  765.     lwl $3 1000001($sp)
  766.  
  767.  
  768.     .data
  769. lwr_:    .asciiz "Testing LWR\n"
  770.     .align 2
  771. lwrd_:    .byte 0 1 2 3 4 5 6 7
  772.     .text
  773.     li $v0 4    # syscall 4 (print_str)
  774.     la $a0 lwr_
  775.     syscall
  776.  
  777.     la $2 lwrd_
  778.     li $3 0x00000500
  779.     lwr $3 0($2)
  780.     bne $3 0x3020100 fail
  781.     move $3 $0
  782.     lwr $3 1($2)
  783.     bne $3 0x30201 fail
  784.     li $3 0x50000000
  785.     lwr $3 1($2)
  786.     bne $3 0x50030201 fail
  787.     move $3 $0
  788.     lwr $3 2($2)
  789.     bne $3 0x0302 fail
  790.     li $3 0x50000000
  791.     lwr $3 2($2)
  792.     bne $3 0x50000302 fail
  793.  
  794.     li $v0 4    # syscall 4 (print_str)
  795.     la $a0 lh2_
  796.     syscall
  797.  
  798.     lwr $3 1000000($sp)
  799.     lwr $3 1000001($sp)
  800.  
  801.  
  802.     .data
  803. mcp_:    .asciiz "Testing move to/from coprocessor z\n"
  804.     .text
  805.     li $v0 4    # syscall 4 (print_str)
  806.     la $a0 mcp_
  807.     syscall
  808.  
  809.     li $2 0x7f7f
  810.     mtc0 $2 $3
  811.     mfc0 $4 $3
  812.     bne $2 $4 fail
  813.     li $2 0x7f7f
  814.     mtc1 $2 $3
  815.     mfc1 $4 $f3
  816.     bne $2 $4 fail
  817.     li $2 0x7f7f
  818.     li $3 0xf7f7
  819.     mtc1.d $2 $4
  820.     mfc1.d $6 $4
  821.     bne $2 $6 fail
  822.     bne $3 $7 fail
  823.     li $2 0x7f7f
  824.     mtc2 $2 $3
  825.     mfc2 $4 $3
  826.     bne $2 $4 fail
  827.     li $2 0x7f7f
  828.     mtc3 $2 $3
  829.     mfc3 $4 $3
  830.     bne $2 $4 fail
  831.  
  832.  
  833.     .data
  834. hilo_:    .asciiz "Testing move to/from HI/LO\n"
  835.     .text
  836.     li $v0 4    # syscall 4 (print_str)
  837.     la $a0 hilo_
  838.     syscall
  839.  
  840.     mthi $0
  841.     mfhi $2
  842.     bnez $2 fail
  843.     mtlo $0
  844.     mflo $2
  845.     bnez $2 fail
  846.     li $2 1
  847.     mthi $2
  848.     mfhi $3
  849.     bne $3 $2 fail
  850.     li $2 1
  851.     mtlo $2
  852.     mflo $3
  853.     bne $3 $2 fail
  854.     li $2 -1
  855.     mthi $2
  856.     mfhi $3
  857.     bne $3 $2 fail
  858.     li $2 -1
  859.     mtlo $2
  860.     mflo $3
  861.     bne $3 $2 fail
  862.  
  863.  
  864.     .data
  865. mul_:    .asciiz "Testing MUL\n"
  866.     .text
  867.     li $v0 4    # syscall 4 (print_str)
  868.     la $a0 mul_
  869.     syscall
  870.  
  871.     mul $2 $0 $0
  872.     bnez $2 fail
  873.     mfhi $3
  874.     bnez $3 fail
  875.     mflo $3
  876.     bnez $3 fail
  877.  
  878.     li $4, 1
  879.     mul $2 $4 $4
  880.     bne $2 1 fail
  881.     mfhi $3
  882.     bnez $3 fail
  883.     mflo $3
  884.     bne $3 1 fail
  885.  
  886.     li $4, -1
  887.     mul $2 $4 $4
  888.     bne $2 1 fail
  889.     mfhi $3
  890.     bnez $3 fail
  891.     mflo $3
  892.     bne $3 1 fail
  893.  
  894.     li $4, -1
  895.     li $5, 1
  896.     mul $2 $4 $5
  897.     bne $2 -1 fail
  898.     mfhi $3
  899.     bne $3 -1 fail
  900.     mflo $3
  901.     bne $3 -1 fail
  902.  
  903.     li $4, 0x10000
  904.     mul $2 $4 $4
  905.     bne $2 0 fail
  906.     mfhi $3
  907.     bne $3 1 fail
  908.     mflo $3
  909.     bne $3 0 fail
  910.  
  911.     li $4, 0x80000000
  912.     mul $2 $4 $4
  913.     bne $2 0 fail
  914.     mfhi $3
  915.     bne $3 0x40000000 fail
  916.     mflo $3
  917.     bne $3 0 fail
  918.  
  919.  
  920.     .data
  921. multu_:    .asciiz "Testing MULTU\n"
  922.     .text
  923.     li $v0 4    # syscall 4 (print_str)
  924.     la $a0 multu_
  925.     syscall
  926.  
  927.     multu $0 $0
  928.     mfhi $3
  929.     bnez $3 fail
  930.     mflo $3
  931.     bnez $3 fail
  932.  
  933.     li $4, 1
  934.     multu $4 $4
  935.     mfhi $3
  936.     bnez $3 fail
  937.     mflo $3
  938.     bne $3 1 fail
  939.  
  940.     li $4, -1
  941.     multu $4 $4
  942.     mfhi $3
  943.     bne $3 0xfffffffe fail
  944.     mflo $3
  945.     bne $3 1 fail
  946.  
  947.     li $4, -1
  948.     li $5, 0
  949.     multu $4 $5
  950.     mfhi $3
  951.     bne $3 0 fail
  952.     mflo $3
  953.     bne $3 0 fail
  954.  
  955.     li $4, -1
  956.     li $5, 1
  957.     multu $4 $5
  958.     mfhi $3
  959.     bne $3 0 fail
  960.     mflo $3
  961.     bne $3 -1 fail
  962.  
  963.     li $4, 0x10000
  964.     multu $4 $4
  965.     mfhi $3
  966.     bne $3 1 fail
  967.     mflo $3
  968.     bne $3 0 fail
  969.  
  970.     li $4, 0x80000000
  971.     multu $4 $4
  972.     mfhi $3
  973.     bne $3 0x40000000 fail
  974.     mflo $3
  975.     bne $3 0 fail
  976.  
  977.     li $3, 0xcecb8f27
  978.     li $4, 0xfd87b5f2
  979.     multu $3 $4
  980.     mfhi $3
  981.     bne $3 0xcccccccb fail
  982.     mflo $3
  983.     bne $3 0x7134e5de fail
  984.  
  985.  
  986.     .data
  987. mulo_:    .asciiz "Testing MULO\n"
  988. mulo1_:    .asciiz "Expect an exception:\n  "
  989.     .text
  990.     li $v0 4    # syscall 4 (print_str)
  991.     la $a0 mulo_
  992.     syscall
  993.  
  994.     mulo $2 $0 $0
  995.     bne $2 0 fail
  996.  
  997.     li $4, 1
  998.     mulo $2 $4 $4
  999.     bne $2 1 fail
  1000.  
  1001.     li $4, -1
  1002.     mulo $2 $4 $4
  1003.     bne $2 1 fail
  1004.  
  1005.     li $4, -1
  1006.     li $5, 1
  1007.     mulo $2 $4 $5
  1008.     bne $2 -1 fail
  1009.  
  1010.     li $v0 4    # syscall 4 (print_str)
  1011.     la $a0 mulo1_
  1012.     syscall
  1013.  
  1014.     li $4, 0x10000
  1015.     mulo $2 $4 $4
  1016.     bne $2 0 fail
  1017.  
  1018.  
  1019.     .data
  1020. nor_:    .asciiz "Testing NOR\n"
  1021.     .text
  1022.     li $v0 4    # syscall 4 (print_str)
  1023.     la $a0 nor_
  1024.     syscall
  1025.  
  1026.     li $2 1
  1027.     li $3 -1
  1028.  
  1029.     nor $4 $0 $0
  1030.     bne $4 -1 fail
  1031.     nor $4 $2 $2
  1032.     bne $4 0xfffffffe fail
  1033.     nor $4 $2 $3
  1034.     bne $4 0 fail
  1035.  
  1036.  
  1037.     .data
  1038. or_:    .asciiz "Testing OR\n"
  1039.     .text
  1040.     li $v0 4    # syscall 4 (print_str)
  1041.     la $a0 or_
  1042.     syscall
  1043.  
  1044.     li $2 1
  1045.     li $3 -1
  1046.  
  1047.     or $4 $0 $0
  1048.     bne $4 0 fail
  1049.     or $4 $2 $2
  1050.     bne $4 1 fail
  1051.     or $4 $2 $3
  1052.     bne $4 -1 fail
  1053.  
  1054.  
  1055.     .data
  1056. ori_:    .asciiz "Testing ORI\n"
  1057.     .text
  1058.     li $v0 4    # syscall 4 (print_str)
  1059.     la $a0 ori_
  1060.     syscall
  1061.  
  1062.     li $2 1
  1063.     li $3 -1
  1064.  
  1065.     ori $4 $0 0
  1066.     bne $4 0 fail
  1067.     ori $4 $2 1
  1068.     bne $4 1 fail
  1069.     ori $4 $2 -1
  1070.     bne $4 0xffffffff fail
  1071.  
  1072.  
  1073. # RFE tested previously
  1074.  
  1075.  
  1076.     .data
  1077. sb_:    .asciiz "Testing SB\n"
  1078. sb2_:    .asciiz "Expect an address error exceptions:\n  "
  1079.     .align 2
  1080. sbd_:    .byte 0, 0, 0, 0
  1081.     .text
  1082.     li $v0 4    # syscall 4 (print_str)
  1083.     la $a0 sb_
  1084.     syscall
  1085.  
  1086.     li $3, 1
  1087.     la $2 sbd_
  1088.     sb $3 0($2)
  1089.     lw $4 0($2)
  1090.     bne $4 0x1 fail
  1091.     li $3 2
  1092.     sb $3 1($2)
  1093.     lw $4 0($2)
  1094.     bne $4 0x201 fail
  1095.     li $3 3
  1096.     sb $3 2($2)
  1097.     lw $4 0($2)
  1098.     bne $4 0x30201 fail
  1099.     li $3 4
  1100.     sb $3 3($2)
  1101.     lw $4 0($2)
  1102.     bne $4 0x4030201 fail
  1103.  
  1104.  
  1105.     li $v0 4    # syscall 4 (print_str)
  1106.     la $a0 sb2_
  1107.     syscall
  1108.  
  1109.     sb $3 1000000($sp)
  1110.  
  1111.  
  1112.     .data
  1113. sd_:    .asciiz "Testing SD\n"
  1114. sd2_:    .asciiz "Expect two address error exceptions:\n"
  1115.     .align 2
  1116. sdd_:    .word 0, 0, 0, 0
  1117.     .text
  1118.     li $v0 4    # syscall 4 (print_str)
  1119.     la $a0 sd_
  1120.     syscall
  1121.  
  1122.     li $3, 0x7f7f7f7f
  1123.     li $4, 0xf7f7f7f7
  1124.     la $2 sdd_
  1125.     sd $3 0($2)
  1126.     ld $5 0($2)
  1127.     bne $3 $5 fail
  1128.     bne $4 $4 fail
  1129.  
  1130.     li $v0 4    # syscall 4 (print_str)
  1131.     la $a0 sd2_
  1132.     syscall
  1133.  
  1134.     sd $3 1000000($sp)
  1135.     sd $3 1000001($sp)
  1136.  
  1137.  
  1138.     .data
  1139. sh_:    .asciiz "Testing SH\n"
  1140. sh2_:    .asciiz "Expect two address error exceptions:\n"
  1141.     .align 2
  1142. shd_:    .byte 0, 0, 0, 0
  1143.     .text
  1144.     li $v0 4    # syscall 4 (print_str)
  1145.     la $a0 sh_
  1146.     syscall
  1147.  
  1148.     li $3, 1
  1149.     la $2 shd_
  1150.     sh $3 0($2)
  1151.     lw $4 0($2)
  1152.     bne $4 0x1 fail
  1153.     li $3 2
  1154.     sh $3 2($2)
  1155.     lw $4 0($2)
  1156.     bne $4 0x20001 fail
  1157.  
  1158.     li $v0 4    # syscall 4 (print_str)
  1159.     la $a0 sh2_
  1160.     syscall
  1161.  
  1162.     sh $3 1000000($sp)
  1163.     sh $3 1000001($sp)
  1164.  
  1165.  
  1166.     .data
  1167. sll_:    .asciiz "Testing SLL\n"
  1168.     .text
  1169.     li $v0 4    # syscall 4 (print_str)
  1170.     la $a0 sll_
  1171.     syscall
  1172.  
  1173.     li $2 1
  1174.  
  1175.     sll $3 $2 0
  1176.     bne $3 1 fail
  1177.     sll $3 $2 1
  1178.     bne $3 2 fail
  1179.     sll $3 $2 16
  1180.     bne $3 0x10000 fail
  1181.     sll $3 $2 32
  1182.     bne $3 1 fail
  1183.  
  1184.  
  1185.     .data
  1186. sllv_:    .asciiz "Testing SLLV\n"
  1187.     .text
  1188.     li $v0 4    # syscall 4 (print_str)
  1189.     la $a0 sllv_
  1190.     syscall
  1191.  
  1192.     li $2 1
  1193.     li $4 0
  1194.     sllv $3 $2 $4
  1195.     bne $3 1 fail
  1196.     li $4 1
  1197.     sllv $3 $2 $4
  1198.     bne $3 2 fail
  1199.     li $4 16
  1200.     sllv $3 $2 $4
  1201.     bne $3 0x10000 fail
  1202.     li $4 32
  1203.     sllv $3 $2 $4
  1204.     bne $3 1 fail
  1205.  
  1206.  
  1207.     .data
  1208. slt_:    .asciiz "Testing SLT\n"
  1209.     .text
  1210.     li $v0 4    # syscall 4 (print_str)
  1211.     la $a0 slt_
  1212.     syscall
  1213.  
  1214.     slt $3 $0 $0
  1215.     bne $3 0 fail
  1216.     li $2 1
  1217.     slt $3 $2 $0
  1218.     bne $3 0 fail
  1219.     slt $3 $0 $2
  1220.     bne $3 1 fail
  1221.     li $2 -1
  1222.     slt $3 $2 $0
  1223.     bne $3 1 fail
  1224.     slt $3 $0 $2
  1225.     bne $3 0 fail
  1226.     li $2 -1
  1227.     li $4 1
  1228.     slt $3 $2 $4
  1229.     bne $3 1 fail
  1230.  
  1231.  
  1232.     .data
  1233. slti_:    .asciiz "Testing SLTI\n"
  1234.     .text
  1235.     li $v0 4    # syscall 4 (print_str)
  1236.     la $a0 slti_
  1237.     syscall
  1238.  
  1239.     slti $3 $0 0
  1240.     bne $3 0 fail
  1241.     li $2 1
  1242.     slti $3 $2 0
  1243.     bne $3 0 fail
  1244.     slti $3 $0 1
  1245.     bne $3 1 fail
  1246.     li $2 -1
  1247.     slti $3 $2 0
  1248.     bne $3 1 fail
  1249.     slti $3 $0 -1
  1250.     bne $3 0 fail
  1251.     li $2 -1
  1252.     li $4 1
  1253.     slti $3 $2 1
  1254.     bne $3 1 fail
  1255.     slti $3 $4 -1
  1256.     bne $3 0 fail
  1257.  
  1258.  
  1259.     .data
  1260. sltiu_:    .asciiz "Testing SLTIU\n"
  1261.     .text
  1262.     li $v0 4    # syscall 4 (print_str)
  1263.     la $a0 sltiu_
  1264.     syscall
  1265.  
  1266.     sltiu $3 $0 0
  1267.     bne $3 0 fail
  1268.     li $2 1
  1269.     sltiu $3 $2 0
  1270.     bne $3 0 fail
  1271.     sltiu $3 $0 1
  1272.     bne $3 1 fail
  1273.     li $2 -1
  1274.     sltiu $3 $2 0
  1275.     bne $3 0 fail
  1276.     sltiu $3 $0 -1
  1277.     bne $3 1 fail
  1278.     li $2 -1
  1279.     li $4 1
  1280.     sltiu $3 $2 1
  1281.     bne $3 0 fail
  1282.     sltiu $3 $4 -1
  1283.     bne $3 1 fail
  1284.  
  1285.  
  1286.     .data
  1287. sltu_:    .asciiz "Testing SLTU\n"
  1288.     .text
  1289.     li $v0 4    # syscall 4 (print_str)
  1290.     la $a0 sltu_
  1291.     syscall
  1292.  
  1293.     sltu $3 $0 $0
  1294.     bne $3 0 fail
  1295.     li $2 1
  1296.     sltu $3 $2 $0
  1297.     bne $3 0 fail
  1298.     sltu $3 $0 $2
  1299.     bne $3 1 fail
  1300.     li $2 -1
  1301.     sltu $3 $2 $0
  1302.     bne $3 0 fail
  1303.     sltu $3 $0 $2
  1304.     bne $3 1 fail
  1305.     li $2 -1
  1306.     li $4 1
  1307.     sltu $3 $2 $4
  1308.     bne $3 0 fail
  1309.  
  1310.  
  1311.     .data
  1312. sra_:    .asciiz "Testing SRA\n"
  1313.     .text
  1314.     li $v0 4    # syscall 4 (print_str)
  1315.     la $a0 sra_
  1316.     syscall
  1317.  
  1318.     li $2 1
  1319.     sra $3 $2 0
  1320.     bne $3 1 fail
  1321.     sra $3 $2 1
  1322.     bne $3 0 fail
  1323.     li $2 0x1000
  1324.     sra $3 $2 4
  1325.     bne $3 0x100 fail
  1326.     li $2 0x80000000
  1327.     sra $3 $2 4
  1328.     bne $3 0xf8000000 fail
  1329.  
  1330.  
  1331.     .data
  1332. srav_:    .asciiz "Testing SRAV\n"
  1333.     .text
  1334.     li $v0 4    # syscall 4 (print_str)
  1335.     la $a0 srav_
  1336.     syscall
  1337.  
  1338.     li $2 1
  1339.     li $4 0
  1340.     srav $3 $2 $4
  1341.     bne $3 1 fail
  1342.     li $4 1
  1343.     srav $3 $2 $4
  1344.     bne $3 0 fail
  1345.     li $2 0x1000
  1346.     li $4 4
  1347.     srav $3 $2 $4
  1348.     bne $3 0x100 fail
  1349.     li $2 0x80000000
  1350.     li $4 4
  1351.     srav $3 $2 $4
  1352.     bne $3 0xf8000000 fail
  1353.  
  1354.  
  1355.     .data
  1356. srl_:    .asciiz "Testing SRL\n"
  1357.     .text
  1358.     li $v0 4    # syscall 4 (print_str)
  1359.     la $a0 srl_
  1360.     syscall
  1361.  
  1362.     li $2 1
  1363.     srl $3 $2 0
  1364.     bne $3 1 fail
  1365.     srl $3 $2 1
  1366.     bne $3 0 fail
  1367.     li $2 0x1000
  1368.     srl $3 $2 4
  1369.     bne $3 0x100 fail
  1370.     li $2 0x80000000
  1371.     srl $3 $2 4
  1372.     bne $3 0x08000000 fail
  1373.  
  1374.  
  1375.     .data
  1376. srlv_:    .asciiz "Testing SRLV\n"
  1377.     .text
  1378.     li $v0 4    # syscall 4 (print_str)
  1379.     la $a0 srlv_
  1380.     syscall
  1381.  
  1382.     li $2 1
  1383.     li $4 0
  1384.     srlv $3 $2 $4
  1385.     bne $3 1 fail
  1386.     li $4 1
  1387.     srlv $3 $2 $4
  1388.     bne $3 0 fail
  1389.     li $2 0x1000
  1390.     li $4 4
  1391.     srlv $3 $2 $4
  1392.     bne $3 0x100 fail
  1393.     li $2 0x80000000
  1394.     li $4 4
  1395.     srlv $3 $2 $4
  1396.     bne $3 0x08000000 fail
  1397.  
  1398.  
  1399.     .data
  1400. sub_:    .asciiz "Testing SUB\n"
  1401. sub1_:    .asciiz "Expect an overflow exceptions:\n  "
  1402.     .text
  1403.     li $v0 4    # syscall 4 (print_str)
  1404.     la $a0 sub_
  1405.     syscall
  1406.  
  1407.     li $2 1
  1408.     li $3 -1
  1409.  
  1410.     sub $4, $0, $0
  1411.     bnez $4 fail
  1412.     sub $4, $0, $2
  1413.     bne $4 -1 fail
  1414.     sub $4, $2, $0
  1415.     bne $4, 1 fail
  1416.     sub $4, $2, $3
  1417.     bne $4, 2 fail
  1418.     sub $4, $3, $2
  1419.     bne $4, -2 fail
  1420.  
  1421.     li $v0 4    # syscall 4 (print_str)
  1422.     la $a0 sub1_
  1423.     syscall
  1424.     li $2 0x80000000
  1425.     li $3 1
  1426.     sub $4, $3, $2
  1427.  
  1428.  
  1429.     .data
  1430. subu_:    .asciiz "Testing SUBU\n"
  1431.     .text
  1432.     li $v0 4    # syscall 4 (print_str)
  1433.     la $a0 subu_
  1434.     syscall
  1435.  
  1436.     li $2 1
  1437.     li $3 -1
  1438.  
  1439.     subu $4, $0, $0
  1440.     bnez $4 fail
  1441.     subu $4, $0, $2
  1442.     bne $4 -1 fail
  1443.     subu $4, $2, $0
  1444.     bne $4, 1 fail
  1445.     subu $4, $2, $3
  1446.     bne $4, 2 fail
  1447.     subu $4, $3, $2
  1448.     bne $4, -2 fail
  1449.  
  1450.     li $2 0x80000000
  1451.     li $3 1
  1452.     subu $4, $3, $2
  1453.  
  1454.  
  1455.     .data
  1456. sw_:    .asciiz "Testing SW\n"
  1457. sw2_:    .asciiz "Expect two address error exceptions:\n"
  1458.     .align 2
  1459. swd_:    .byte 0, 0, 0, 0
  1460.     .text
  1461.     li $v0 4    # syscall 4 (print_str)
  1462.     la $a0 sw_
  1463.     syscall
  1464.  
  1465.     li $3, 0x7f7f7f7f
  1466.     la $2 swd_
  1467.     sw $3 0($2)
  1468.     lw $4 0($2)
  1469.     bne $4 0x7f7f7f7f fail
  1470.  
  1471.     li $v0 4    # syscall 4 (print_str)
  1472.     la $a0 sw2_
  1473.     syscall
  1474.  
  1475.     sw $3 1000000($sp)
  1476.     sw $3 1000001($sp)
  1477.  
  1478.  
  1479.     .data
  1480. lswc_:    .asciiz "Testing load/store word coprocessor z\n"
  1481.     .align 2
  1482. lswcd_:    .byte 0, 0, 0, 0
  1483.     .text
  1484.     li $v0 4    # syscall 4 (print_str)
  1485.     la $a0 lswc_
  1486.     syscall
  1487.  
  1488.     li $3, 0x7f7f7f7f
  1489.     la $2 lswcd_
  1490.     mtc0 $3, $0
  1491.     swc0 $0 0($2)
  1492.     lw $4 0($2)
  1493.     bne $4 $3 fail
  1494.     lwc0 $1 0($2)
  1495.     mfc0 $5, $1
  1496.     bne $5 $3 fail
  1497.  
  1498.     li $3, 0x7f7f7f7f
  1499.     la $2 lswcd_
  1500.     mtc1 $3, $0
  1501.     swc1 $f0 0($2)
  1502.     lw $4 0($2)
  1503.     bne $4 $3 fail
  1504.     lwc1 $f1 0($2)
  1505.     mfc1 $5, $f1
  1506.     bne $5 $3 fail
  1507.  
  1508.     li $3, 0x7f7f7f7f
  1509.     la $2 lswcd_
  1510.     mtc2 $3, $0
  1511.     swc2 $0 0($2)
  1512.     lw $4 0($2)
  1513.     bne $4 $3 fail
  1514.     lwc2 $1 0($2)
  1515.     mfc2 $5, $1
  1516.     bne $5 $3 fail
  1517.  
  1518.     li $3, 0x7f7f7f7f
  1519.     la $2 lswcd_
  1520.     mtc3 $3, $0
  1521.     swc3 $0 0($2)
  1522.     lw $4 0($2)
  1523.     bne $4 $3 fail
  1524.     lwc3 $1 0($2)
  1525.     mfc3 $5, $1
  1526.     bne $5 $3 fail
  1527.  
  1528.  
  1529.     .data
  1530. swl_:    .asciiz "Testing SWL\n"
  1531.     .align 2
  1532. swld_:    .word 0 0
  1533.     .text
  1534.     li $v0 4    # syscall 4 (print_str)
  1535.     la $a0 swl_
  1536.     syscall
  1537.  
  1538.     la $2 swld_
  1539.     li $3 0x01000000
  1540.     swl $3 0($2)
  1541.     lw $4 0($2)
  1542.     bne $4 0x1 fail
  1543.  
  1544.     li $3 0x01020000
  1545.     swl $3 1($2)
  1546.     lw $4 0($2)
  1547.     bne $4 0x0102 fail
  1548.  
  1549.     li $3 0x01020300
  1550.     swl $3 2($2)
  1551.     lw $4 0($2)
  1552.     bne $4 0x010203 fail
  1553.  
  1554.     li $3 0x01020304
  1555.     swl $3 3($2)
  1556.     lw $4 0($2)
  1557.     bne $4 0x01020304 fail
  1558.  
  1559.  
  1560.     .data
  1561. swr_:    .asciiz "Testing SWR\n"
  1562.     .align 2
  1563. swrd_:    .word 0 0
  1564.     .text
  1565.     li $v0 4    # syscall 4 (print_str)
  1566.     la $a0 swr_
  1567.     syscall
  1568.  
  1569.     la $2 swrd_
  1570.     li $3 1
  1571.     swr $3 0($2)
  1572.     lw $4 0($2)
  1573.     bne $4 1 fail
  1574.  
  1575.     li $3 0x0102
  1576.     swr $3 1($2)
  1577.     lw $4 0($2)
  1578.     bne $4 0x10201 fail
  1579.  
  1580.     li $3 0x010203
  1581.     swr $3 2($2)
  1582.     lw $4 0($2)
  1583.     bne $4 0x2030201 fail
  1584.  
  1585.     li $3 0x01020304
  1586.     swr $3 3($2)
  1587.     lw $4 0($2)
  1588.     bne $4 0x4030201 fail
  1589.  
  1590.  
  1591.     .data
  1592. syscall_:.asciiz "Testing SYSCALL\n"
  1593. syscall1_:.asciiz "The next line should contain: -1, -1.000000, -2.000000\n"
  1594. syscall2_:.asciiz ", "
  1595. fp_sm1:    .float -1.0
  1596. fp_dm2:    .double -2.0
  1597. fp_c1:    .float 17.18
  1598. fp_c2:    .float 1700.18
  1599. fp_c3:    .double 17.18e10
  1600. fp_c4:    .double 1700.18e10
  1601. syscall5_:.asciiz "\n"
  1602.     .text
  1603.     li $v0 4    # syscall 4 (print_str)
  1604.     la $a0 syscall_
  1605.     syscall
  1606.  
  1607.     li $v0 4    # syscall 4 (print_str)
  1608.     la $a0 syscall1_
  1609.     syscall
  1610.  
  1611.     li $v0 1
  1612.     li $a0 -1
  1613.     syscall
  1614.  
  1615.     li $v0 4    # syscall 4 (print_str)
  1616.     la $a0 syscall2_
  1617.     syscall
  1618.  
  1619.     lwc1 $f12 fp_sm1
  1620.     li $v0 2
  1621.     syscall
  1622.  
  1623.     li $v0 4    # syscall 4 (print_str)
  1624.     la $a0 syscall2_
  1625.     syscall
  1626.  
  1627.     lwc1 $f12 fp_dm2
  1628.     lwc1 $f13 fp_dm2+4
  1629.     li $v0 3
  1630.     syscall
  1631.  
  1632.     li $v0 4    # syscall 4 (print_str)
  1633.     la $a0 syscall5_
  1634.     syscall
  1635.  
  1636.  
  1637.     li $v0 5    # syscall 5 (read_int)
  1638.     syscall
  1639.     bne $v0 17 fail
  1640.  
  1641.     li $v0 5    # syscall 5 (read_int)
  1642.     syscall
  1643.     bne $v0 1717 fail
  1644.  
  1645.  
  1646.     li $v0 6    # syscall 6 (read_float)
  1647.     syscall
  1648.     lwc1 $f2 fp_c1
  1649.     c.eq.s $f0, $f2
  1650.     bc1f fail
  1651.  
  1652.     li $v0 6    # syscall 6 (read_float)
  1653.     syscall
  1654.     lwc1 $f2 fp_c2
  1655.     c.eq.s $f0, $f2
  1656.     bc1f fail
  1657.  
  1658.  
  1659.     li $v0 7    # syscall 7 (read_double)
  1660.     syscall
  1661.     lwc1 $f2 fp_c3
  1662.     lwc1 $f3 fp_c3+4
  1663.     c.eq.d $f0, $f2
  1664.     bc1f fail
  1665.  
  1666.     li $v0 7    # syscall 7 (read_double)
  1667.     syscall
  1668.     lwc1 $f2 fp_c4
  1669.     lwc1 $f3 fp_c4+4
  1670.     c.eq.d $f0, $f2
  1671.     bc1f fail
  1672.  
  1673.  
  1674.     .data
  1675. xor_:    .asciiz "Testing XOR\n"
  1676.     .text
  1677.     li $v0 4    # syscall 4 (print_str)
  1678.     la $a0 xor_
  1679.     syscall
  1680.  
  1681.     li $2 1
  1682.     li $3 -1
  1683.  
  1684.     xor $4 $0 $0
  1685.     bne $4 0 fail
  1686.     xor $4 $3 $3
  1687.     bne $4 0 fail
  1688.     xor $4 $2 $3
  1689.     bne $4 0xfffffffe fail
  1690.  
  1691.  
  1692.     .data
  1693. xori_:    .asciiz "Testing XORI\n"
  1694.     .text
  1695.     li $v0 4    # syscall 4 (print_str)
  1696.     la $a0 xori_
  1697.     syscall
  1698.  
  1699.     li $2 1
  1700.     li $3 -1
  1701.  
  1702.     xori $4 $0 0
  1703.     bne $4 0 fail
  1704.     xori $4 $3 -1
  1705.     bne $4 0 fail
  1706.     xori $4 $2 -1
  1707.     bne $4 0xfffffffe fail
  1708.  
  1709.  
  1710. #
  1711. # Testing Floating Point Ops
  1712. #
  1713.  
  1714.     .data
  1715. abs.s_:.asciiz "Testing ABS.S\n"
  1716. fp_s100:.float 100.0
  1717. fp_sm100:.float -100.0
  1718.     .text
  1719.     li $v0 4    # syscall 4 (print_str)
  1720.     la $a0 abs.s_
  1721.     syscall
  1722.  
  1723.     lw $4 fp_s100
  1724.     lwc1 $f0 fp_s100
  1725.     abs.s $f2 $f0
  1726.     mfc1 $5 $f2
  1727.     bne $4 $5 fail
  1728.  
  1729.     lwc1 $f0 fp_sm100
  1730.     abs.s $f2 $f0
  1731.     mfc1 $5 $f2
  1732.     bne $4 $5 fail
  1733.  
  1734.  
  1735.     .data
  1736. abs.d_:.asciiz "Testing ABS.D\n"
  1737. fp_d100:.double 100.0
  1738. fp_dm100:.double -100.0
  1739.     .text
  1740.     li $v0 4    # syscall 4 (print_str)
  1741.     la $a0 abs.d_
  1742.     syscall
  1743.  
  1744.     lw $4 fp_d100
  1745.     lw $5 fp_d100+4
  1746.     lwc1 $f0 fp_d100
  1747.     lwc1 $f1 fp_d100+4
  1748.     abs.d $f2 $f0
  1749.     mfc1 $6 $f2
  1750.     mfc1 $7 $f3
  1751.     bne $4 $6 fail
  1752.     bne $5 $7 fail
  1753.  
  1754.     lwc1 $f0 fp_dm100
  1755.     lwc1 $f1 fp_dm100+4
  1756.     abs.d $f2 $f0
  1757.     mfc1 $6 $f2
  1758.     mfc1 $7 $f3
  1759.     bne $4 $6 fail
  1760.     bne $5 $7 fail
  1761.  
  1762.  
  1763.     .data
  1764. add.s_:    .asciiz "Testing ADD.S\n"
  1765. fp_s0:    .float 0.0
  1766. fp_s1:    .float 1.0
  1767.     .text
  1768.     li $v0 4    # syscall 4 (print_str)
  1769.     la $a0 add.s_
  1770.     syscall
  1771.  
  1772.     lw $4 fp_s0
  1773.     lwc1 $f0 fp_s0
  1774.     add.s $f2 $f0 $f0
  1775.     mfc1 $6 $f2
  1776.     bne $4 $6 fail
  1777.  
  1778.     lw $4 fp_s1
  1779.     lwc1 $f0 fp_s0
  1780.     lwc1 $f2 fp_s1
  1781.     add.s $f4 $f0 $f2
  1782.     mfc1 $6 $f4
  1783.     bne $4 $6 fail
  1784.  
  1785.     lw $4 fp_s0
  1786.     lwc1 $f0 fp_s1
  1787.     lwc1 $f2 fp_sm1
  1788.     add.s $f4 $f0 $f2
  1789.     mfc1 $6 $f4
  1790.     bne $4 $6 fail
  1791.  
  1792.  
  1793.     .data
  1794. add.d_:    .asciiz "Testing ADD.D\n"
  1795. fp_d0:    .double 0.0
  1796. fp_d1:    .double 1.0
  1797. fp_dm1:    .double -1.0
  1798.     .text
  1799.     li $v0 4    # syscall 4 (print_str)
  1800.     la $a0 add.d_
  1801.     syscall
  1802.  
  1803.     lw $4 fp_d0
  1804.     lw $5 fp_d0+4
  1805.     lwc1 $f0 fp_d0
  1806.     lwc1 $f1 fp_d0+4
  1807.     add.d $f2 $f0 $f0
  1808.     mfc1 $6 $f2
  1809.     mfc1 $7 $f3
  1810.     bne $4 $6 fail
  1811.     bne $5 $7 fail
  1812.  
  1813.     lw $4 fp_d1
  1814.     lw $5 fp_d1+4
  1815.     lwc1 $f0 fp_d0
  1816.     lwc1 $f1 fp_d0+4
  1817.     lwc1 $f2 fp_d1
  1818.     lwc1 $f3 fp_d1+4
  1819.     add.d $f4 $f0 $f2
  1820.     mfc1 $6 $f4
  1821.     mfc1 $7 $f5
  1822.     bne $4 $6 fail
  1823.     bne $5 $7 fail
  1824.  
  1825.     lw $4 fp_d0
  1826.     lw $5 fp_d0+4
  1827.     lwc1 $f0 fp_d1
  1828.     lwc1 $f1 fp_d1+4
  1829.     lwc1 $f2 fp_dm1
  1830.     lwc1 $f3 fp_dm1+4
  1831.     add.d $f4 $f0 $f2
  1832.     mfc1 $6 $f4
  1833.     mfc1 $7 $f5
  1834.     bne $4 $6 fail
  1835.     bne $5 $7 fail
  1836.  
  1837.  
  1838. # BC1F and BC1T tested below.
  1839.  
  1840.  
  1841. # ToDo: Check order/unordered exception in floating point comparison.
  1842.  
  1843.     .data
  1844. c.eq.d_:    .asciiz "Testing C.EQ.D\n"
  1845.     .text
  1846.     li $v0 4    # syscall 4 (print_str)
  1847.     la $a0 c.eq.d_
  1848.     syscall
  1849.  
  1850.     lwc1 $f0 fp_d1
  1851.     lwc1 $f1 fp_d1+4
  1852.     lwc1 $f2 fp_d1
  1853.     lwc1 $f3 fp_d1+4
  1854.     lwc1 $f4 fp_d1p5
  1855.     lwc1 $f5 fp_d1p5+4
  1856.     c.eq.d $f0 $f2
  1857.     bc1f fail
  1858.     bc1t l200
  1859.     j fail
  1860. l200:    c.eq.d $f0 $f4
  1861.     bc1t fail
  1862.     bc1f l201
  1863.     j fail
  1864. l201:
  1865.  
  1866.  
  1867.     .data
  1868. c.eq.s_:    .asciiz "Testing C.EQ.S\n"
  1869.     .text
  1870.     li $v0 4    # syscall 4 (print_str)
  1871.     la $a0 c.eq.s_
  1872.     syscall
  1873.  
  1874.     lwc1 $f0 fp_s1
  1875.     lwc1 $f2 fp_s1
  1876.     lwc1 $f4 fp_s1p5
  1877.     c.eq.s $f0 $f2
  1878.     bc1f fail
  1879.     bc1t l210
  1880.     j fail
  1881. l210:    c.eq.s $f0 $f4
  1882.     bc1t fail
  1883.     bc1f l211
  1884.     j fail
  1885. l211:
  1886.  
  1887.  
  1888.     .data
  1889. c.f.d_:    .asciiz "Testing C.F.D\n"
  1890.     .text
  1891.     li $v0 4    # syscall 4 (print_str)
  1892.     la $a0 c.f.d_
  1893.     syscall
  1894.  
  1895.     lwc1 $f0 fp_d1
  1896.     lwc1 $f1 fp_d1+4
  1897.     lwc1 $f2 fp_d1
  1898.     lwc1 $f3 fp_d1+4
  1899.     lwc1 $f4 fp_d1p5
  1900.     lwc1 $f5 fp_d1p5+4
  1901.     c.f.d $f0 $f2
  1902.     bc1t fail
  1903.     bc1f l220
  1904.     j fail
  1905. l220:    c.f.d $f0 $f4
  1906.     bc1t fail
  1907.     bc1f l221
  1908.     j fail
  1909. l221:
  1910.  
  1911.  
  1912.     .data
  1913. c.f.s_:    .asciiz "Testing C.F.S\n"
  1914.     .text
  1915.     li $v0 4    # syscall 4 (print_str)
  1916.     la $a0 c.f.s_
  1917.     syscall
  1918.  
  1919.     lwc1 $f0 fp_s1
  1920.     lwc1 $f2 fp_s1
  1921.     lwc1 $f4 fp_s1p5
  1922.     c.f.s $f0 $f2
  1923.     bc1t fail
  1924.     bc1f l230
  1925.     j fail
  1926. l230:    c.f.s $f0 $f4
  1927.     bc1t fail
  1928.     bc1f l231
  1929.     j fail
  1930. l231:
  1931.  
  1932.  
  1933.     .data
  1934. c.le.d_:    .asciiz "Testing C.LE.D\n"
  1935.     .text
  1936.     li $v0 4    # syscall 4 (print_str)
  1937.     la $a0 c.le.d_
  1938.     syscall
  1939.  
  1940.     lwc1 $f0 fp_d1
  1941.     lwc1 $f1 fp_d1+4
  1942.     lwc1 $f2 fp_d1p5
  1943.     lwc1 $f3 fp_d1p5+4
  1944.     lwc1 $f4 fp_dm2
  1945.     lwc1 $f5 fp_dm2+4
  1946.     c.le.d $f0 $f2
  1947.     bc1f fail
  1948.     bc1t l240
  1949.     j fail
  1950. l240:    c.le.d $f2 $f0
  1951.     bc1t fail
  1952.     bc1f l241
  1953.     j fail
  1954. l241:    c.le.d $f0 $f0
  1955.     bc1f fail
  1956.     bc1t l242
  1957.     j fail
  1958. l242:    c.le.d $f4 $f0
  1959.     bc1f fail
  1960.     bc1t l243
  1961.     j fail
  1962. l243:
  1963.  
  1964.  
  1965.     .data
  1966. c.le.s_:    .asciiz "Testing C.LE.S\n"
  1967. fp_sm2:    .float -2.0
  1968.     .text
  1969.     li $v0 4    # syscall 4 (print_str)
  1970.     la $a0 c.le.s_
  1971.     syscall
  1972.  
  1973.     lwc1 $f0 fp_s1
  1974.     lwc1 $f2 fp_s1p5
  1975.     lwc1 $f4 fp_sm2
  1976.     c.le.s $f0 $f2
  1977.     bc1f fail
  1978.     bc1t l250
  1979.     j fail
  1980. l250:    c.le.s $f2 $f0
  1981.     bc1t fail
  1982.     bc1f l251
  1983.     j fail
  1984. l251:    c.le.s $f0 $f0
  1985.     bc1f fail
  1986.     bc1t l252
  1987.     j fail
  1988. l252:    c.le.s $f4 $f0
  1989.     bc1f fail
  1990.     bc1t l253
  1991.     j fail
  1992. l253:
  1993.  
  1994.  
  1995.     .data
  1996. c.lt.d_:    .asciiz "Testing C.LT.D\n"
  1997.     .text
  1998.     li $v0 4    # syscall 4 (print_str)
  1999.     la $a0 c.lt.d_
  2000.     syscall
  2001.  
  2002.     lwc1 $f0 fp_d1
  2003.     lwc1 $f1 fp_d1+4
  2004.     lwc1 $f2 fp_d1p5
  2005.     lwc1 $f3 fp_d1p5+4
  2006.     lwc1 $f4 fp_dm2
  2007.     lwc1 $f5 fp_dm2+4
  2008.     c.lt.d $f0 $f2
  2009.     bc1f fail
  2010.     bc1t l260
  2011.     j fail
  2012. l260:    c.lt.d $f2 $f0
  2013.     bc1t fail
  2014.     bc1f l261
  2015.     j fail
  2016. l261:    c.lt.d $f0 $f0
  2017.     bc1t fail
  2018.     bc1f l262
  2019.     j fail
  2020. l262:    c.lt.d $f4 $f0
  2021.     bc1f fail
  2022.     bc1t l263
  2023.     j fail
  2024. l263:
  2025.  
  2026.  
  2027.     .data
  2028. c.lt.s_:    .asciiz "Testing C.LT.S\n"
  2029.     .text
  2030.     li $v0 4    # syscall 4 (print_str)
  2031.     la $a0 c.lt.s_
  2032.     syscall
  2033.  
  2034.     lwc1 $f0 fp_s1
  2035.     lwc1 $f2 fp_s1p5
  2036.     lwc1 $f4 fp_sm2
  2037.     c.lt.s $f0 $f2
  2038.     bc1f fail
  2039.     bc1t l270
  2040.     j fail
  2041. l270:    c.lt.s $f2 $f0
  2042.     bc1t fail
  2043.     bc1f l271
  2044.     j fail
  2045. l271:    c.lt.s $f0 $f0
  2046.     bc1t fail
  2047.     bc1f l272
  2048.     j fail
  2049. l272:    c.lt.s $f4 $f0
  2050.     bc1f fail
  2051.     bc1t l273
  2052.     j fail
  2053. l273:
  2054.  
  2055.  
  2056.     .data
  2057. c.nge.d_:    .asciiz "Testing C.NGE.D\n"
  2058.     .text
  2059.     li $v0 4    # syscall 4 (print_str)
  2060.     la $a0 c.nge.d_
  2061.     syscall
  2062.  
  2063.     lwc1 $f0 fp_d1
  2064.     lwc1 $f1 fp_d1+4
  2065.     lwc1 $f2 fp_d1p5
  2066.     lwc1 $f3 fp_d1p5+4
  2067.     lwc1 $f4 fp_dm2
  2068.     lwc1 $f5 fp_dm2+4
  2069.     c.nge.d $f0 $f2
  2070.     bc1f fail
  2071.     bc1t l280
  2072.     j fail
  2073. l280:    c.nge.d $f2 $f0
  2074.     bc1t fail
  2075.     bc1f l281
  2076.     j fail
  2077. l281:    c.nge.d $f0 $f0
  2078.     bc1t fail
  2079.     bc1f l282
  2080.     j fail
  2081. l282:    c.nge.d $f4 $f0
  2082.     bc1f fail
  2083.     bc1t l283
  2084.     j fail
  2085. l283:
  2086.  
  2087.  
  2088.     .data
  2089. c.nge.s_:    .asciiz "Testing C.NGE.S\n"
  2090.     .text
  2091.     li $v0 4    # syscall 4 (print_str)
  2092.     la $a0 c.nge.s_
  2093.     syscall
  2094.  
  2095.     lwc1 $f0 fp_s1
  2096.     lwc1 $f2 fp_s1p5
  2097.     lwc1 $f4 fp_sm2
  2098.     c.nge.s $f0 $f2
  2099.     bc1f fail
  2100.     bc1t l290
  2101.     j fail
  2102. l290:    c.nge.s $f2 $f0
  2103.     bc1t fail
  2104.     bc1f l291
  2105.     j fail
  2106. l291:    c.nge.s $f0 $f0
  2107.     bc1t fail
  2108.     bc1f l292
  2109.     j fail
  2110. l292:    c.nge.s $f4 $f0
  2111.     bc1f fail
  2112.     bc1t l293
  2113.     j fail
  2114. l293:
  2115.  
  2116.  
  2117.     .data
  2118. c.ngle.d_:    .asciiz "Testing C.NGLE.D\n"
  2119.     .text
  2120.     li $v0 4    # syscall 4 (print_str)
  2121.     la $a0 c.ngle.d_
  2122.     syscall
  2123.  
  2124.     lwc1 $f0 fp_d1
  2125.     lwc1 $f1 fp_d1+4
  2126.     lwc1 $f2 fp_d1
  2127.     lwc1 $f3 fp_d1+4
  2128.     lwc1 $f4 fp_d1p5
  2129.     lwc1 $f5 fp_d1p5+4
  2130.     c.ngle.d $f0 $f2
  2131.     bc1t fail
  2132. l300:    c.ngle.d $f0 $f4
  2133.     bc1t fail
  2134. l301:
  2135.  
  2136.  
  2137.     .data
  2138. c.ngle.s_:    .asciiz "Testing C.NGLE.S\n"
  2139.     .text
  2140.     li $v0 4    # syscall 4 (print_str)
  2141.     la $a0 c.ngle.s_
  2142.     syscall
  2143.  
  2144.     lwc1 $f0 fp_s1
  2145.     lwc1 $f2 fp_s1
  2146.     lwc1 $f4 fp_s1p5
  2147.     c.ngle.s $f0 $f2
  2148.     bc1t fail
  2149. l310:    c.ngle.s $f0 $f4
  2150.     bc1t fail
  2151. l311:
  2152.  
  2153.  
  2154.     .data
  2155. c.ngl.d_:    .asciiz "Testing C.NGL.D\n"
  2156.     .text
  2157.     li $v0 4    # syscall 4 (print_str)
  2158.     la $a0 c.ngl.d_
  2159.     syscall
  2160.  
  2161.     lwc1 $f0 fp_d1
  2162.     lwc1 $f1 fp_d1+4
  2163.     lwc1 $f2 fp_d1
  2164.     lwc1 $f3 fp_d1+4
  2165.     lwc1 $f4 fp_d1p5
  2166.     lwc1 $f5 fp_d1p5+4
  2167.     c.ngl.d $f0 $f2
  2168.     bc1f fail
  2169.     bc1t l320
  2170.     j fail
  2171. l320:    c.ngl.d $f0 $f4
  2172.     bc1t fail
  2173.     bc1f l321
  2174.     j fail
  2175. l321:
  2176.  
  2177.  
  2178.     .data
  2179. c.ngl.s_:    .asciiz "Testing C.NGL.S\n"
  2180.     .text
  2181.     li $v0 4    # syscall 4 (print_str)
  2182.     la $a0 c.ngl.s_
  2183.     syscall
  2184.  
  2185.     lwc1 $f0 fp_s1
  2186.     lwc1 $f2 fp_s1
  2187.     lwc1 $f4 fp_s1p5
  2188.     c.ngl.s $f0 $f2
  2189.     bc1f fail
  2190.     bc1t l330
  2191.     j fail
  2192. l330:    c.ngl.s $f0 $f4
  2193.     bc1t fail
  2194.     bc1f l331
  2195.     j fail
  2196. l331:
  2197.  
  2198.  
  2199.     .data
  2200. c.ngt.d_:    .asciiz "Testing C.NGT.D\n"
  2201.     .text
  2202.     li $v0 4    # syscall 4 (print_str)
  2203.     la $a0 c.ngt.d_
  2204.     syscall
  2205.  
  2206.     lwc1 $f0 fp_d1
  2207.     lwc1 $f1 fp_d1+4
  2208.     lwc1 $f2 fp_d1p5
  2209.     lwc1 $f3 fp_d1p5+4
  2210.     lwc1 $f4 fp_dm2
  2211.     lwc1 $f5 fp_dm2+4
  2212.     c.ngt.d $f0 $f2
  2213.     bc1f fail
  2214.     bc1t l340
  2215.     j fail
  2216. l340:    c.ngt.d $f2 $f0
  2217.     bc1t fail
  2218.     bc1f l341
  2219.     j fail
  2220. l341:    c.ngt.d $f0 $f0
  2221.     bc1f fail
  2222.     bc1t l342
  2223.     j fail
  2224. l342:    c.ngt.d $f4 $f0
  2225.     bc1f fail
  2226.     bc1t l343
  2227.     j fail
  2228. l343:
  2229.  
  2230.  
  2231.     .data
  2232. c.ngt.s_:    .asciiz "Testing C.NGT.S\n"
  2233.     .text
  2234.     li $v0 4    # syscall 4 (print_str)
  2235.     la $a0 c.ngt.s_
  2236.     syscall
  2237.  
  2238.     lwc1 $f0 fp_s1
  2239.     lwc1 $f2 fp_s1p5
  2240.     lwc1 $f4 fp_sm2
  2241.     c.ngt.s $f0 $f2
  2242.     bc1f fail
  2243.     bc1t l350
  2244.     j fail
  2245. l350:    c.ngt.s $f2 $f0
  2246.     bc1t fail
  2247.     bc1f l351
  2248.     j fail
  2249. l351:    c.ngt.s $f0 $f0
  2250.     bc1f fail
  2251.     bc1t l352
  2252.     j fail
  2253. l352:    c.ngt.s $f4 $f0
  2254.     bc1f fail
  2255.     bc1t l353
  2256.     j fail
  2257. l353:
  2258.  
  2259.  
  2260.     .data
  2261. c.ole.d_:    .asciiz "Testing C.OLE.D\n"
  2262.     .text
  2263.     li $v0 4    # syscall 4 (print_str)
  2264.     la $a0 c.ole.d_
  2265.     syscall
  2266.  
  2267.     lwc1 $f0 fp_d1
  2268.     lwc1 $f1 fp_d1+4
  2269.     lwc1 $f2 fp_d1p5
  2270.     lwc1 $f3 fp_d1p5+4
  2271.     lwc1 $f4 fp_dm2
  2272.     lwc1 $f5 fp_dm2+4
  2273.     c.ole.d $f0 $f2
  2274.     bc1f fail
  2275.     bc1t l360
  2276.     j fail
  2277. l360:    c.ole.d $f2 $f0
  2278.     bc1t fail
  2279.     bc1f l361
  2280.     j fail
  2281. l361:    c.ole.d $f0 $f0
  2282.     bc1f fail
  2283.     bc1t l362
  2284.     j fail
  2285. l362:    c.ole.d $f4 $f0
  2286.     bc1f fail
  2287.     bc1t l363
  2288.     j fail
  2289. l363:
  2290.  
  2291.  
  2292.     .data
  2293. c.ole.s_:    .asciiz "Testing C.OLE.S\n"
  2294.     .text
  2295.     li $v0 4    # syscall 4 (print_str)
  2296.     la $a0 c.ole.s_
  2297.     syscall
  2298.  
  2299.     lwc1 $f0 fp_s1
  2300.     lwc1 $f2 fp_s1p5
  2301.     lwc1 $f4 fp_sm2
  2302.     c.ole.s $f0 $f2
  2303.     bc1f fail
  2304.     bc1t l370
  2305.     j fail
  2306. l370:    c.ole.s $f2 $f0
  2307.     bc1t fail
  2308.     bc1f l371
  2309.     j fail
  2310. l371:    c.ole.s $f0 $f0
  2311.     bc1f fail
  2312.     bc1t l372
  2313.     j fail
  2314. l372:    c.ole.s $f4 $f0
  2315.     bc1f fail
  2316.     bc1t l373
  2317.     j fail
  2318. l373:
  2319.  
  2320.  
  2321.     .data
  2322. c.seq.d_:    .asciiz "Testing C.SEQ.D\n"
  2323.     .text
  2324.     li $v0 4    # syscall 4 (print_str)
  2325.     la $a0 c.seq.d_
  2326.     syscall
  2327.  
  2328.     lwc1 $f0 fp_d1
  2329.     lwc1 $f1 fp_d1+4
  2330.     lwc1 $f2 fp_d1
  2331.     lwc1 $f3 fp_d1+4
  2332.     lwc1 $f4 fp_d1p5
  2333.     lwc1 $f5 fp_d1p5+4
  2334.     c.seq.d $f0 $f2
  2335.     bc1f fail
  2336.     bc1t l380
  2337.     j fail
  2338. l380:    c.seq.d $f0 $f4
  2339.     bc1t fail
  2340.     bc1f l381
  2341.     j fail
  2342. l381:
  2343.  
  2344.  
  2345.     .data
  2346. c.seq.s_:    .asciiz "Testing C.SEQ.S\n"
  2347.     .text
  2348.     li $v0 4    # syscall 4 (print_str)
  2349.     la $a0 c.seq.s_
  2350.     syscall
  2351.  
  2352.     lwc1 $f0 fp_s1
  2353.     lwc1 $f2 fp_s1
  2354.     lwc1 $f4 fp_s1p5
  2355.     c.seq.s $f0 $f2
  2356.     bc1f fail
  2357.     bc1t l390
  2358.     j fail
  2359. l390:    c.seq.s $f0 $f4
  2360.     bc1t fail
  2361.     bc1f l391
  2362.     j fail
  2363. l391:
  2364.  
  2365.  
  2366.     .data
  2367. c.sf.d_:    .asciiz "Testing C.SF.D\n"
  2368.     .text
  2369.     li $v0 4    # syscall 4 (print_str)
  2370.     la $a0 c.sf.d_
  2371.     syscall
  2372.  
  2373.     lwc1 $f0 fp_d1
  2374.     lwc1 $f1 fp_d1+4
  2375.     lwc1 $f2 fp_d1
  2376.     lwc1 $f3 fp_d1+4
  2377.     lwc1 $f4 fp_d1p5
  2378.     lwc1 $f5 fp_d1p5+4
  2379.     c.sf.d $f0 $f2
  2380.     bc1t fail
  2381. l400:    c.sf.d $f0 $f4
  2382.     bc1t fail
  2383. l401:
  2384.  
  2385.  
  2386.     .data
  2387. c.sf.s_:    .asciiz "Testing C.SF.S\n"
  2388.     .text
  2389.     li $v0 4    # syscall 4 (print_str)
  2390.     la $a0 c.sf.s_
  2391.     syscall
  2392.  
  2393.     lwc1 $f0 fp_s1
  2394.     lwc1 $f2 fp_s1
  2395.     lwc1 $f4 fp_s1p5
  2396.     c.sf.s $f0 $f2
  2397.     bc1t fail
  2398. l410:    c.sf.s $f0 $f4
  2399.     bc1t fail
  2400. l411:
  2401.  
  2402.  
  2403.     .data
  2404. c.ueq.d_:    .asciiz "Testing C.UEQ.D\n"
  2405.     .text
  2406.     li $v0 4    # syscall 4 (print_str)
  2407.     la $a0 c.ueq.d_
  2408.     syscall
  2409.  
  2410.     lwc1 $f0 fp_d1
  2411.     lwc1 $f1 fp_d1+4
  2412.     lwc1 $f2 fp_d1
  2413.     lwc1 $f3 fp_d1+4
  2414.     lwc1 $f4 fp_d1p5
  2415.     lwc1 $f5 fp_d1p5+4
  2416.     c.ueq.d $f0 $f2
  2417.     bc1f fail
  2418.     bc1t l420
  2419.     j fail
  2420. l420:    c.ueq.d $f0 $f4
  2421.     bc1t fail
  2422.     bc1f l421
  2423.     j fail
  2424. l421:
  2425.  
  2426.  
  2427.     .data
  2428. c.ueq.s_:    .asciiz "Testing C.UEQ.S\n"
  2429.     .text
  2430.     li $v0 4    # syscall 4 (print_str)
  2431.     la $a0 c.ueq.s_
  2432.     syscall
  2433.  
  2434.     lwc1 $f0 fp_s1
  2435.     lwc1 $f2 fp_s1
  2436.     lwc1 $f4 fp_s1p5
  2437.     c.ueq.s $f0 $f2
  2438.     bc1f fail
  2439.     bc1t l430
  2440.     j fail
  2441. l430:    c.ueq.s $f0 $f4
  2442.     bc1t fail
  2443.     bc1f l431
  2444.     j fail
  2445. l431:
  2446.  
  2447.  
  2448.     .data
  2449. c.ule.d_:    .asciiz "Testing C.ULE.D\n"
  2450.     .text
  2451.     li $v0 4    # syscall 4 (print_str)
  2452.     la $a0 c.ule.d_
  2453.     syscall
  2454.  
  2455.     lwc1 $f0 fp_d1
  2456.     lwc1 $f1 fp_d1+4
  2457.     lwc1 $f2 fp_d1p5
  2458.     lwc1 $f3 fp_d1p5+4
  2459.     lwc1 $f4 fp_dm2
  2460.     lwc1 $f5 fp_dm2+4
  2461.     c.ule.d $f0 $f2
  2462.     bc1f fail
  2463.     bc1t l440
  2464.     j fail
  2465. l440:    c.ule.d $f2 $f0
  2466.     bc1t fail
  2467.     bc1f l441
  2468.     j fail
  2469. l441:    c.ule.d $f0 $f0
  2470.     bc1f fail
  2471.     bc1t l442
  2472.     j fail
  2473. l442:    c.ule.d $f4 $f0
  2474.     bc1f fail
  2475.     bc1t l443
  2476.     j fail
  2477. l443:
  2478.  
  2479.  
  2480.     .data
  2481. c.ule.s_:    .asciiz "Testing C.ULE.S\n"
  2482.     .text
  2483.     li $v0 4    # syscall 4 (print_str)
  2484.     la $a0 c.ule.s_
  2485.     syscall
  2486.  
  2487.     lwc1 $f0 fp_s1
  2488.     lwc1 $f2 fp_s1p5
  2489.     lwc1 $f4 fp_sm2
  2490.     c.ule.s $f0 $f2
  2491.     bc1f fail
  2492.     bc1t l450
  2493.     j fail
  2494. l450:    c.ule.s $f2 $f0
  2495.     bc1t fail
  2496.     bc1f l451
  2497.     j fail
  2498. l451:    c.ule.s $f0 $f0
  2499.     bc1f fail
  2500.     bc1t l452
  2501.     j fail
  2502. l452:    c.ule.s $f4 $f0
  2503.     bc1f fail
  2504.     bc1t l453
  2505.     j fail
  2506. l453:
  2507.  
  2508.  
  2509.     .data
  2510. c.un.d_:    .asciiz "Testing C.UN.D\n"
  2511.     .text
  2512.     li $v0 4    # syscall 4 (print_str)
  2513.     la $a0 c.un.d_
  2514.     syscall
  2515.  
  2516.     lwc1 $f0 fp_d1
  2517.     lwc1 $f1 fp_d1+4
  2518.     lwc1 $f2 fp_d1
  2519.     lwc1 $f3 fp_d1+4
  2520.     lwc1 $f4 fp_d1p5
  2521.     lwc1 $f5 fp_d1p5+4
  2522.     c.un.d $f0 $f2
  2523.     bc1t fail
  2524.     bc1f l460
  2525.     j fail
  2526. l460:    c.un.d $f0 $f4
  2527.     bc1t fail
  2528.     bc1f l461
  2529.     j fail
  2530. l461:
  2531.  
  2532.  
  2533.     .data
  2534. c.un.s_:    .asciiz "Testing C.UN.S\n"
  2535.     .text
  2536.     li $v0 4    # syscall 4 (print_str)
  2537.     la $a0 c.un.s_
  2538.     syscall
  2539.  
  2540.     lwc1 $f0 fp_s1
  2541.     lwc1 $f2 fp_s1
  2542.     lwc1 $f4 fp_s1p5
  2543.     c.un.s $f0 $f2
  2544.     bc1t fail
  2545.     bc1f l470
  2546.     j fail
  2547. l470:    c.un.s $f0 $f4
  2548.     bc1t fail
  2549.     bc1f l471
  2550.     j fail
  2551. l471:
  2552.  
  2553.  
  2554. # CFC1 and CTC1 tested previously
  2555.  
  2556.  
  2557.     .data
  2558. cvt.d.s_:    .asciiz "Testing CVT.D.S\n"
  2559.     .text
  2560.     li $v0 4    # syscall 4 (print_str)
  2561.     la $a0 cvt.d.s_
  2562.     syscall
  2563.  
  2564.     lw $4 fp_d0
  2565.     lw $5 fp_d0+4
  2566.     lwc1 $f0 fp_s0
  2567.     cvt.d.s $f2 $f0
  2568.     mfc1 $6 $f2
  2569.     mfc1 $7 $f3
  2570.     bne $4 $6 fail
  2571.     bne $5 $7 fail
  2572.  
  2573.     lw $4 fp_d1
  2574.     lw $5 fp_d1+4
  2575.     lwc1 $f0 fp_s1
  2576.     cvt.d.s $f2 $f0
  2577.     mfc1 $6 $f2
  2578.     mfc1 $7 $f3
  2579.     bne $4 $6 fail
  2580.     bne $5 $7 fail
  2581.  
  2582.     lw $4 fp_dm1
  2583.     lw $5 fp_dm1+4
  2584.     lwc1 $f0 fp_sm1
  2585.     cvt.d.s $f2 $f0
  2586.     mfc1 $6 $f2
  2587.     mfc1 $7 $f3
  2588.     bne $4 $6 fail
  2589.     bne $5 $7 fail
  2590.  
  2591.  
  2592.     .data
  2593. cvt.d.w_:    .asciiz "Testing CVT.D.W\n"
  2594.     .text
  2595.     li $v0 4    # syscall 4 (print_str)
  2596.     la $a0 cvt.d.w_
  2597.     syscall
  2598.  
  2599.     lw $4 fp_d0
  2600.     lw $5 fp_d0+4
  2601.     mtc1 $0 $0
  2602.     cvt.d.w $f2 $f0
  2603.     mfc1 $6 $f2
  2604.     mfc1 $7 $f3
  2605.     bne $4 $6 fail
  2606.     bne $5 $7 fail
  2607.  
  2608.     lw $4 fp_d1
  2609.     lw $5 fp_d1+4
  2610.     li $t1 1
  2611.     mtc1 $t1 $0
  2612.     cvt.d.w $f2 $f0
  2613.     mfc1 $6 $f2
  2614.     mfc1 $7 $f3
  2615.     bne $4 $6 fail
  2616.     bne $5 $7 fail
  2617.  
  2618.     lw $4 fp_dm1
  2619.     lw $5 fp_dm1+4
  2620.     li $t1 -1
  2621.     mtc1 $t1 $0
  2622.     cvt.d.w $f2 $f0
  2623.     mfc1 $6 $f2
  2624.     mfc1 $7 $f3
  2625.     bne $4 $6 fail
  2626.     bne $5 $7 fail
  2627.  
  2628.  
  2629.     .data
  2630. cvt.s.d_:    .asciiz "Testing CVT.S.D\n"
  2631.     .text
  2632.     li $v0 4    # syscall 4 (print_str)
  2633.     la $a0 cvt.s.d_
  2634.     syscall
  2635.  
  2636.     lw $4 fp_s0
  2637.     lwc1 $f0 fp_d0
  2638.     lwc1 $f1 fp_d0+4
  2639.     cvt.s.d $f2 $f0
  2640.     mfc1 $6 $f2
  2641.     bne $4 $6 fail
  2642.  
  2643.     lw $4 fp_s1
  2644.     lwc1 $f0 fp_d1
  2645.     lwc1 $f1 fp_d1+4
  2646.     cvt.s.d $f2 $f0
  2647.     mfc1 $6 $f2
  2648.     bne $4 $6 fail
  2649.  
  2650.     lw $4 fp_sm1
  2651.     lwc1 $f0 fp_dm1
  2652.     lwc1 $f1 fp_dm1+4
  2653.     cvt.s.d $f2 $f0
  2654.     mfc1 $6 $f2
  2655.     bne $4 $6 fail
  2656.  
  2657.  
  2658.     .data
  2659. cvt.s.w_:    .asciiz "Testing CVT.S.W\n"
  2660.     .text
  2661.     li $v0 4    # syscall 4 (print_str)
  2662.     la $a0 cvt.s.w_
  2663.     syscall
  2664.  
  2665.     lw $4 fp_s0
  2666.     mtc1 $0 $0
  2667.     cvt.s.w $f2 $f0
  2668.     mfc1 $6 $f2
  2669.     bne $4 $6 fail
  2670.  
  2671.     lw $4 fp_s1
  2672.     li $t1 1
  2673.     mtc1 $t1 $0
  2674.     cvt.s.w $f2 $f0
  2675.     mfc1 $6 $f2
  2676.     bne $4 $6 fail
  2677.  
  2678.     lw $4 fp_sm1
  2679.     li $t1 -1
  2680.     mtc1 $t1 $0
  2681.     cvt.s.w $f2 $f0
  2682.     mfc1 $6 $f2
  2683.     bne $4 $6 fail
  2684.  
  2685.  
  2686.     .data
  2687. cvt.w.d_:    .asciiz "Testing CVT.W.D\n"
  2688.     .text
  2689.     li $v0 4    # syscall 4 (print_str)
  2690.     la $a0 cvt.w.d_
  2691.     syscall
  2692.  
  2693.     lwc1 $f0 fp_d0
  2694.     lwc1 $f1 fp_d0+4
  2695.     cvt.w.d $f2 $f0
  2696.     mfc1 $6 $f2
  2697.     bne $0 $6 fail
  2698.  
  2699.     lwc1 $f0 fp_d1
  2700.     lwc1 $f1 fp_d1+4
  2701.     cvt.w.d $f2 $f0
  2702.     mfc1 $6 $f2
  2703.     li $4 1
  2704.     bne $4 $6 fail
  2705.  
  2706.     lwc1 $f0 fp_dm1
  2707.     lwc1 $f1 fp_dm1+4
  2708.     cvt.w.d $f2 $f0
  2709.     mfc1 $6 $f2
  2710.     li $4 -1
  2711.     bne $4 $6 fail
  2712.  
  2713.  
  2714.     .data
  2715. cvt.w.s_:    .asciiz "Testing CVT.W.S\n"
  2716.     .text
  2717.     li $v0 4    # syscall 4 (print_str)
  2718.     la $a0 cvt.w.s_
  2719.     syscall
  2720.  
  2721.     lwc1 $f0 fp_s0
  2722.     cvt.w.s $f2 $f0
  2723.     mfc1 $6 $f2
  2724.     bne $0 $6 fail
  2725.  
  2726.     lwc1 $f0 fp_s1
  2727.     cvt.w.s $f2 $f0
  2728.     mfc1 $6 $f2
  2729.     li $4 1
  2730.     bne $4 $6 fail
  2731.  
  2732.     lwc1 $f0 fp_sm1
  2733.     cvt.w.s $f2 $f0
  2734.     mfc1 $6 $f2
  2735.     li $4 -1
  2736.     bne $4 $6 fail
  2737.  
  2738.  
  2739.     .data
  2740. div.s_:    .asciiz "Testing DIV.S\n"
  2741. fp_s2:    .float 2.0
  2742. fp_s3:    .float 3.0
  2743. fp_s1p5:.float 1.5
  2744.     .text
  2745.     li $v0 4    # syscall 4 (print_str)
  2746.     la $a0 div.s_
  2747.     syscall
  2748.  
  2749.     lw $4 fp_s1
  2750.     lwc1 $f0 fp_s1
  2751.     div.s $f2 $f0 $f0
  2752.     mfc1 $6 $f2
  2753.     bne $4 $6 fail
  2754.  
  2755.     lw $4 fp_s1p5
  2756.     lwc1 $f0 fp_s3
  2757.     lwc1 $f2 fp_s2
  2758.     div.s $f4 $f0 $f2
  2759.     mfc1 $6 $f4
  2760.     bne $4 $6 fail
  2761.  
  2762.  
  2763.     .data
  2764. div.d_:    .asciiz "Testing DIV.D\n"
  2765. fp_d2:    .double 2.0
  2766. fp_d3:    .double 3.0
  2767. fp_d1p5:.double 1.5
  2768.     .text
  2769.     li $v0 4    # syscall 4 (print_str)
  2770.     la $a0 div.d_
  2771.     syscall
  2772.  
  2773.     lw $4 fp_d1
  2774.     lw $5 fp_d1+4
  2775.     lwc1 $f0 fp_d1
  2776.     lwc1 $f1 fp_d1+4
  2777.     div.d $f2 $f0 $f0
  2778.     mfc1 $6 $f2
  2779.     mfc1 $7 $f3
  2780.     bne $4 $6 fail
  2781.     bne $5 $7 fail
  2782.  
  2783.     lw $4 fp_d1p5
  2784.     lw $5 fp_d1p5+4
  2785.     lwc1 $f0 fp_d3
  2786.     lwc1 $f1 fp_d3+4
  2787.     lwc1 $f2 fp_d2
  2788.     lwc1 $f3 fp_d2+4
  2789.     div.d $f4 $f0 $f2
  2790.     mfc1 $6 $f4
  2791.     mfc1 $7 $f5
  2792.     bne $4 $6 fail
  2793.     bne $5 $7 fail
  2794.  
  2795.  
  2796. # LWC1, MFC1 tested pfreviously
  2797.  
  2798.     .data
  2799. mov.s_:    .asciiz "Testing MOV.S\n"
  2800.     .text
  2801.     li $v0 4    # syscall 4 (print_str)
  2802.     la $a0 mov.s_
  2803.     syscall
  2804.  
  2805.     lw $4 fp_s1
  2806.     lwc1 $f2 fp_s1
  2807.     mov.s $f4 $f2
  2808.     mov.s $f6 $f4
  2809.     mfc1 $6 $f6
  2810.     bne $4 $6 fail
  2811.  
  2812.     .data
  2813. mov.d_:    .asciiz "Testing MOV.D\n"
  2814.     .text
  2815.     li $v0 4    # syscall 4 (print_str)
  2816.     la $a0 mov.d_
  2817.     syscall
  2818.  
  2819.     lw $4 fp_d1
  2820.     lw $5 fp_d1+4
  2821.     lwc1 $f2 fp_d1
  2822.     lwc1 $f3 fp_d1+4
  2823.     mov.d $f4 $f2
  2824.     mov.d $f6 $f4
  2825.     mfc1 $6 $f6
  2826.     mfc1 $7 $f7
  2827.     bne $4 $6 fail
  2828.     bne $5 $7 fail
  2829.  
  2830.  
  2831. # MTC1 tested previously
  2832.  
  2833.     .data
  2834. mul.s_:    .asciiz "Testing MUL.S\n"
  2835.     .text
  2836.     li $v0 4    # syscall 4 (print_str)
  2837.     la $a0 mul.s_
  2838.     syscall
  2839.  
  2840.     lw $4 fp_s1
  2841.     lwc1 $f0 fp_s1
  2842.     mul.s $f2 $f0 $f0
  2843.     mfc1 $6 $f2
  2844.     bne $4 $6 fail
  2845.  
  2846.     lw $4 fp_s3
  2847.     lwc1 $f0 fp_s1p5
  2848.     lwc1 $f2 fp_s2
  2849.     mul.s $f4 $f0 $f2
  2850.     mfc1 $6 $f4
  2851.     bne $4 $6 fail
  2852.  
  2853.  
  2854.     .data
  2855. mul.d_:    .asciiz "Testing MUL.D\n"
  2856.     .text
  2857.     li $v0 4    # syscall 4 (print_str)
  2858.     la $a0 mul.d_
  2859.     syscall
  2860.  
  2861.     lw $4 fp_d1
  2862.     lw $5 fp_d1+4
  2863.     lwc1 $f0 fp_d1
  2864.     lwc1 $f1 fp_d1+4
  2865.     mul.d $f2 $f0 $f0
  2866.     mfc1 $6 $f2
  2867.     mfc1 $7 $f3
  2868.     bne $4 $6 fail
  2869.     bne $5 $7 fail
  2870.  
  2871.     lw $4 fp_d3
  2872.     lw $5 fp_d3+4
  2873.     lwc1 $f0 fp_d1p5
  2874.     lwc1 $f1 fp_d1p5+4
  2875.     lwc1 $f2 fp_d2
  2876.     lwc1 $f3 fp_d2+4
  2877.     mul.d $f4 $f0 $f2
  2878.     mfc1 $6 $f4
  2879.     mfc1 $7 $f5
  2880.     bne $4 $6 fail
  2881.     bne $5 $7 fail
  2882.  
  2883.  
  2884.     .data
  2885. neg.s_:    .asciiz "Testing NEG.S\n"
  2886. fp_sm3:    .float -3.0
  2887.     .text
  2888.     li $v0 4    # syscall 4 (print_str)
  2889.     la $a0 neg.s_
  2890.     syscall
  2891.  
  2892.     lw $4 fp_sm1
  2893.     lwc1 $f0 fp_s1
  2894.     neg.s $f2 $f0
  2895.     mfc1 $6 $f2
  2896.     bne $4 $6 fail
  2897.  
  2898.     lw $4 fp_s3
  2899.     lwc1 $f0 fp_sm3
  2900.     neg.s $f2 $f0
  2901.     mfc1 $6 $f2
  2902.     bne $4 $6 fail
  2903.  
  2904.  
  2905.     .data
  2906. neg.d_:    .asciiz "Testing NEG.D\n"
  2907. fp_dm3:    .double -3.0
  2908.     .text
  2909.     li $v0 4    # syscall 4 (print_str)
  2910.     la $a0 neg.d_
  2911.     syscall
  2912.  
  2913.     lw $4 fp_dm1
  2914.     lw $5 fp_dm1+4
  2915.     lwc1 $f0 fp_d1
  2916.     lwc1 $f1 fp_d1+4
  2917.     neg.d $f2 $f0
  2918.     mfc1 $6 $f2
  2919.     mfc1 $7 $f3
  2920.     bne $4 $6 fail
  2921.     bne $5 $7 fail
  2922.  
  2923.     lw $4 fp_d3
  2924.     lw $5 fp_d3+4
  2925.     lwc1 $f0 fp_dm3
  2926.     lwc1 $f1 fp_dm3+4
  2927.     neg.d $f4 $f0
  2928.     mfc1 $6 $f4
  2929.     mfc1 $7 $f5
  2930.     bne $4 $6 fail
  2931.     bne $5 $7 fail
  2932.  
  2933.  
  2934.     .data
  2935. sub.s_:    .asciiz "Testing SUB.S\n"
  2936.     .text
  2937.     li $v0 4    # syscall 4 (print_str)
  2938.     la $a0 sub.s_
  2939.     syscall
  2940.  
  2941.     lw $4 fp_s0
  2942.     lwc1 $f0 fp_s0
  2943.     sub.s $f2 $f0 $f0
  2944.     mfc1 $6 $f2
  2945.     bne $4 $6 fail
  2946.  
  2947.     lw $4 fp_sm1
  2948.     lw $5 fp_s1
  2949.     lwc1 $f0 fp_s0
  2950.     lwc1 $f2 fp_s1
  2951.     sub.s $f4 $f0 $f2
  2952.     mfc1 $6 $f4
  2953.     bne $4 $6 fail
  2954.     sub.s $f4 $f2 $f0
  2955.     mfc1 $6 $f4
  2956.     bne $5 $6 fail
  2957.  
  2958.     lw $4 fp_s1p5
  2959.     lwc1 $f0 fp_s1p5
  2960.     lwc1 $f2 fp_s3
  2961.     sub.s $f4 $f2 $f0
  2962.     mfc1 $6 $f4
  2963.     bne $4 $6 fail
  2964.  
  2965.  
  2966.     .data
  2967. sub.d_:    .asciiz "Testing SUB.D\n"
  2968.     .text
  2969.     li $v0 4    # syscall 4 (print_str)
  2970.     la $a0 sub.d_
  2971.     syscall
  2972.  
  2973.     lw $4 fp_d0
  2974.     lw $5 fp_d0+4
  2975.     lwc1 $f0 fp_d0
  2976.     lwc1 $f1 fp_d0+4
  2977.     sub.d $f2 $f0 $f0
  2978.     mfc1 $6 $f2
  2979.     mfc1 $7 $f3
  2980.     bne $4 $6 fail
  2981.     bne $5 $7 fail
  2982.  
  2983.     lw $4 fp_dm1
  2984.     lw $5 fp_dm1+4
  2985.     lwc1 $f0 fp_d0
  2986.     lwc1 $f1 fp_d0+4
  2987.     lwc1 $f2 fp_d1
  2988.     lwc1 $f3 fp_d1+4
  2989.     sub.d $f4 $f0 $f2
  2990.     mfc1 $6 $f4
  2991.     mfc1 $7 $f5
  2992.     bne $4 $6 fail
  2993.     bne $5 $7 fail
  2994.     lw $4 fp_d1
  2995.     lw $5 fp_d1+4
  2996.     sub.d $f4 $f2 $f0
  2997.     mfc1 $6 $f4
  2998.     mfc1 $7 $f5
  2999.     bne $4 $6 fail
  3000.     bne $5 $7 fail
  3001.  
  3002.     lw $4 fp_d1p5
  3003.     lw $5 fp_d1p5+4
  3004.     lwc1 $f0 fp_d1p5
  3005.     lwc1 $f1 fp_d1p5+4
  3006.     lwc1 $f2 fp_d3
  3007.     lwc1 $f3 fp_d3+4
  3008.     sub.d $f4 $f2 $f0
  3009.     mfc1 $6 $f4
  3010.     mfc1 $7 $f5
  3011.     bne $4 $6 fail
  3012.     bne $5 $7 fail
  3013.  
  3014.  
  3015. # SWC1 tested previously
  3016.  
  3017.  
  3018. #
  3019. # Testing Pseudo Ops
  3020. #
  3021.  
  3022.     .data
  3023. abs_:    .asciiz "Testing ABS\n"
  3024.     .text
  3025.     li $v0 4    # syscall 4 (print_str)
  3026.     la $a0 abs_
  3027.     syscall
  3028.  
  3029.     li $2 1
  3030.     abs $3 $2
  3031.     bne $3 1 fail
  3032.  
  3033.     li $2 -1
  3034.     abs $2 $2
  3035.     bne $2 1 fail
  3036.  
  3037.     li $2 0
  3038.     abs $2 $2
  3039.     bne $2 0 fail
  3040.  
  3041.  
  3042.     .data
  3043. b_:    .asciiz "Testing B\n"
  3044.     .text
  3045.     li $v0 4    # syscall 4 (print_str)
  3046.     la $a0 b_
  3047.     syscall
  3048.  
  3049.  
  3050.     b l101
  3051.     b fail
  3052. l101:
  3053.  
  3054.  
  3055.     .data
  3056. bal_:    .asciiz "Testing BAL\n"
  3057.     .text
  3058.     li $v0 4    # syscall 4 (print_str)
  3059.     la $a0 bal_
  3060.     syscall
  3061.  
  3062.     bal l102
  3063. l103:    j l104
  3064. l102:    la $4 l103
  3065.     bne $31 $4 fail
  3066.     jr $31
  3067. l104:
  3068.  
  3069.  
  3070.     .data
  3071. beqz_:    .asciiz "Testing BEQZ\n"
  3072.     .text
  3073.     li $v0 4    # syscall 4 (print_str)
  3074.     la $a0 beqz_
  3075.     syscall
  3076.  
  3077.     beqz $0 l105
  3078.     j fail
  3079. l105:    li $2 1
  3080.     beqz $2 fail
  3081.  
  3082.  
  3083.     .data
  3084. bge_:    .asciiz "Testing BGE\n"
  3085.     .text
  3086.     li $v0 4    # syscall 4 (print_str)
  3087.     la $a0 bge_
  3088.     syscall
  3089.  
  3090.     bge $0 $0 l106
  3091.     j fail
  3092. l106:    li $2 1
  3093.     bge $0 $2 fail
  3094.     bge $2 $0 l107
  3095.     j fail
  3096. l107:    li $3 -1
  3097.     bge $3 $2 fail
  3098.     bge $2 $3 l108
  3099.     j fail
  3100. l108:
  3101.  
  3102.     bge $0 0 l109
  3103.     j fail
  3104. l109:    li $2 1
  3105.     bge $0 1 fail
  3106.     bge $2 0 l110
  3107.     j fail
  3108. l110:    li $3 -1
  3109.     bge $3 1 fail
  3110.     bge $2 -1 l111
  3111.     j fail
  3112. l111:
  3113.  
  3114.  
  3115.     .data
  3116. bgeu_:    .asciiz "Testing BGEU\n"
  3117.     .text
  3118.     li $v0 4    # syscall 4 (print_str)
  3119.     la $a0 bgeu_
  3120.     syscall
  3121.  
  3122.     bgeu $0 $0 l112
  3123.     j fail
  3124. l112:    li $2 1
  3125.     bgeu $0 $2 fail
  3126.     bgeu $2 $0 l113
  3127.     j fail
  3128. l113:    li $3 -1
  3129.     bgeu $2 $3 fail
  3130.     bgeu $3 $2 l114
  3131.     j fail
  3132. l114:
  3133.  
  3134.     bgeu $0 0 l115
  3135.     j fail
  3136. l115:    li $2 1
  3137.     bgeu $0 1 fail
  3138.     bgeu $2 0 l116
  3139.     j fail
  3140. l116:    li $3 -1
  3141.     bgeu $2 -1 fail
  3142.     bgeu $3 1 l117
  3143.     j fail
  3144. l117:
  3145.  
  3146.  
  3147.     .data
  3148. bgt_:    .asciiz "Testing BGT\n"
  3149.     .text
  3150.     li $v0 4    # syscall 4 (print_str)
  3151.     la $a0 bgt_
  3152.     syscall
  3153.  
  3154.     bgt $0 $0 fail
  3155. l120:    li $2 1
  3156.     bgt $0 $2 fail
  3157.     bgt $2 $0 l121
  3158.     j fail
  3159. l121:    li $3 -1
  3160.     bgt $3 $2 fail
  3161.     bgt $2 $3 l122
  3162.     j fail
  3163. l122:
  3164.  
  3165.     bgt $0 0 fail
  3166. l123:    li $2 1
  3167.     bgt $0 1 fail
  3168.     bgt $2 0 l124
  3169.     j fail
  3170. l124:    li $3 -1
  3171.     bgt $3 1 fail
  3172.     bgt $2 -1 l125
  3173.     j fail
  3174. l125:
  3175.  
  3176.  
  3177.     .data
  3178. bgtu_:    .asciiz "Testing BGTU\n"
  3179.     .text
  3180.     li $v0 4    # syscall 4 (print_str)
  3181.     la $a0 bgtu_
  3182.     syscall
  3183.  
  3184.     bgtu $0 $0 fail
  3185. l132:    li $2 1
  3186.     bgtu $0 $2 fail
  3187.     bgtu $2 $0 l133
  3188.     j fail
  3189. l133:    li $3 -1
  3190.     bgtu $2 $3 fail
  3191.     bgtu $3 $2 l134
  3192.     j fail
  3193. l134:
  3194.  
  3195.     bgtu $0 0 fail
  3196. l135:    li $2 1
  3197.     bgtu $0 1 fail
  3198.     bgtu $2 0 l136
  3199.     j fail
  3200. l136:    li $3 -1
  3201.     bgtu $2 -1 fail
  3202.     bgtu $3 1 l137
  3203.     j fail
  3204. l137:
  3205.  
  3206.  
  3207.     .data
  3208. ble_:    .asciiz "Testing BLE\n"
  3209.     .text
  3210.     li $v0 4    # syscall 4 (print_str)
  3211.     la $a0 ble_
  3212.     syscall
  3213.  
  3214.     ble $0 $0 l140
  3215.     j fail
  3216. l140:    li $2 1
  3217.     ble $2 $0 fail
  3218.     ble $0 $2 l141
  3219.     j fail
  3220. l141:    li $3 -1
  3221.     ble $2 $3 fail
  3222.     ble $3 $2 l142
  3223.     j fail
  3224. l142:
  3225.  
  3226.     ble $0 0 l143
  3227.     j fail
  3228. l143:    li $2 1
  3229.     ble $2 0 fail
  3230.     ble $0 1 l144
  3231.     j fail
  3232. l144:    li $3 -1
  3233.     ble $2 -1 fail
  3234.     ble $3 1 l145
  3235.     j fail
  3236. l145:
  3237.  
  3238.  
  3239.     .data
  3240. bleu_:    .asciiz "Testing BLEU\n"
  3241.     .text
  3242.     li $v0 4    # syscall 4 (print_str)
  3243.     la $a0 bleu_
  3244.     syscall
  3245.  
  3246.     bleu $0 $0 l152
  3247.     j fail
  3248. l152:    li $2 1
  3249.     bleu $2 $0 fail
  3250.     bleu $0 $2 l153
  3251.     j fail
  3252. l153:    li $3 -1
  3253.     bleu $3 $2 fail
  3254.     bleu $2 $3 l154
  3255.     j fail
  3256. l154:
  3257.  
  3258.     bleu $0 0 l155
  3259.     j fail
  3260. l155:    li $2 1
  3261.     bleu $2 0 fail
  3262.     bleu $0 1 l156
  3263.     j fail
  3264. l156:    li $3 -1
  3265.     bleu $3 1 fail
  3266.     bleu $2 -1 l157
  3267.     j fail
  3268. l157:
  3269.  
  3270.  
  3271.     .data
  3272. blt_:    .asciiz "Testing BLT\n"
  3273.     .text
  3274.     li $v0 4    # syscall 4 (print_str)
  3275.     la $a0 blt_
  3276.     syscall
  3277.  
  3278.     blt $0 $0 fail
  3279. l160:    li $2 1
  3280.     blt $2 $0 fail
  3281.     blt $0 $2 l161
  3282.     j fail
  3283. l161:    li $3 -1
  3284.     blt $2 $3 fail
  3285.     blt $3 $2 l162
  3286.     j fail
  3287. l162:
  3288.  
  3289.     blt $0 0 fail
  3290. l163:    li $2 1
  3291.     blt $2 0 fail
  3292.     blt $0 1 l164
  3293.     j fail
  3294. l164:    li $3 -1
  3295.     blt $2 -1 fail
  3296.     blt $3 1 l165
  3297.     j fail
  3298. l165:
  3299.  
  3300.  
  3301.     .data
  3302. bltu_:    .asciiz "Testing BLTU\n"
  3303.     .text
  3304.     li $v0 4    # syscall 4 (print_str)
  3305.     la $a0 bltu_
  3306.     syscall
  3307.  
  3308.     bltu $0 $0 fail
  3309. l172:    li $2 1
  3310.     bltu $2 $0 fail
  3311.     bltu $0 $2 l173
  3312.     j fail
  3313. l173:    li $3 -1
  3314.     bltu $3 $2 fail
  3315.     bltu $2 $3 l174
  3316.     j fail
  3317. l174:
  3318.  
  3319.     bltu $0 0 fail
  3320. l175:    li $2 1
  3321.     bltu $2 0 fail
  3322.     bltu $0 1 l176
  3323.     j fail
  3324. l176:    li $3 -1
  3325.     bltu $3 1 fail
  3326.     bltu $2 -1 l177
  3327.     j fail
  3328. l177:
  3329.  
  3330.  
  3331.     .data
  3332. bnez_:    .asciiz "Testing BNEZ\n"
  3333.     .text
  3334.     li $v0 4    # syscall 4 (print_str)
  3335.     la $a0 bnez_
  3336.     syscall
  3337.  
  3338.     bnez $0 fail
  3339.     li $2 1
  3340.     bnez $2 l180
  3341.     j fail
  3342. l180:
  3343.  
  3344.  
  3345. # DIV and DIVU checked previously
  3346.  
  3347.  
  3348.     .data
  3349. l_s_:    .asciiz "Testing L_S\n"
  3350.     .text
  3351.     li $v0 4    # syscall 4 (print_str)
  3352.     la $a0 l_s_
  3353.     syscall
  3354.  
  3355.     lw $2 fp_s1p5
  3356.     l.s $f0 fp_s1p5
  3357.     mfc1 $4 $f0
  3358.     bne $2 $4 fail
  3359.  
  3360.     .data
  3361. l_d_:    .asciiz "Testing L_D\n"
  3362.     .text
  3363.     li $v0 4    # syscall 4 (print_str)
  3364.     la $a0 l_d_
  3365.     syscall
  3366.  
  3367.     lw $2 fp_d1p5
  3368.     lw $3 fp_d1p5+4
  3369.     l.d $f0 fp_d1p5
  3370.     mfc1 $4 $f0
  3371.     mfc1 $5 $f1
  3372.     bne $2 $4 fail
  3373.     bne $3 $5 fail
  3374.  
  3375.  
  3376. # LA better work or nothing above will work
  3377.  
  3378.  
  3379.     .data
  3380. li_:    .asciiz "Testing LI\n"
  3381.     .text
  3382.     li $v0 4    # syscall 4 (print_str)
  3383.     la $a0 li_
  3384.     syscall
  3385.  
  3386.     li $2 0xfffffff
  3387.     bne $2 0xfffffff fail
  3388.     li $2 0xffffffe
  3389.     bne $2 0xffffffe fail
  3390.     li $2 0
  3391.     bnez $2 fail
  3392.     li $2 0x7fffffff
  3393.     bne $2 0x7fffffff fail
  3394.     li $2 32767
  3395.     bne $2 32767 fail
  3396.     li $2 32768
  3397.     bne $2 32768 fail
  3398.     li $2 65535
  3399.     bne $2 65535 fail
  3400.     li $2 65536
  3401.     bne $2 65536 fail
  3402.  
  3403.  
  3404.     .data
  3405. li.d_:    .asciiz "Testing LI.d\n"
  3406.     .text
  3407.     li $v0 4    # syscall 4 (print_str)
  3408.     la $a0 li.d_
  3409.     syscall
  3410.  
  3411.     li.d $f0 1.0
  3412.     mfc1 $2, $f0
  3413.     mfc1 $3, $f1
  3414.     lw $4, fp_d1
  3415.     lw $5, fp_d1+4
  3416.     bne $2 $4 fail
  3417.     bne $3 $5 fail
  3418.  
  3419.     li.d $f0 -1.0
  3420.     mfc1 $2, $f0
  3421.     mfc1 $3, $f1
  3422.     lw $4, fp_dm1
  3423.     lw $5, fp_dm1+4
  3424.     bne $2 $4 fail
  3425.     bne $3 $5 fail
  3426.  
  3427.  
  3428.     .data
  3429. li.s_:    .asciiz "Testing LI.s\n"
  3430.     .text
  3431.     li $v0 4    # syscall 4 (print_str)
  3432.     la $a0 li.s_
  3433.     syscall
  3434.  
  3435.     li.s $f0 1.0
  3436.     mfc1 $2, $f0
  3437.     lw $3, fp_s1
  3438.     bne $2 $3 fail
  3439.  
  3440.     li.s $f0 -1.0
  3441.     mfc1 $2, $f0
  3442.     lw $3, fp_sm1
  3443.     bne $2 $3 fail
  3444.  
  3445.  
  3446.     .data
  3447. move_:    .asciiz "Testing MOVE\n"
  3448.     .text
  3449.     li $v0 4    # syscall 4 (print_str)
  3450.     la $a0 move_
  3451.     syscall
  3452.  
  3453.     li $2 0xfffffff
  3454.     move $3 $2
  3455.     bne $2 $3 fail
  3456.  
  3457.  
  3458. # MUL and MULO and MULOU were tested previously
  3459.  
  3460.  
  3461.     .data
  3462. neg_:    .asciiz "Testing NEG\n"
  3463.     .text
  3464.     li $v0 4    # syscall 4 (print_str)
  3465.     la $a0 neg_
  3466.     syscall
  3467.  
  3468.     li $2 -101
  3469.     neg $3 $2
  3470.     bne $3 101 fail
  3471.     li $2 101
  3472.     neg $2 $2
  3473.     bne $2 -101 fail
  3474.     neg $2 $0
  3475.     bne $2 0 fail
  3476.  
  3477.  
  3478.     .data
  3479. negu_:    .asciiz "Testing NEGU\n"
  3480.     .text
  3481.     li $v0 4    # syscall 4 (print_str)
  3482.     la $a0 negu_
  3483.     syscall
  3484.  
  3485.     li $2 -101
  3486.     negu $3 $2
  3487.     bne $3 101 fail
  3488.     li $2 101
  3489.     negu $2 $2
  3490.     bne $2 -101 fail
  3491.     negu $2 $0
  3492.     bne $2 0 fail
  3493.  
  3494.     .data
  3495. nop_:    .asciiz "Testing NOP\n"
  3496.     .text
  3497.     li $v0 4    # syscall 4 (print_str)
  3498.     la $a0 nop_
  3499.     syscall
  3500.  
  3501.     nop        # How do we test it??
  3502.  
  3503.  
  3504.     .data
  3505. not_:    .asciiz "Testing NOT\n"
  3506.     .text
  3507.     li $v0 4    # syscall 4 (print_str)
  3508.     la $a0 not_
  3509.     syscall
  3510.  
  3511.     not $2 $0
  3512.     bne $2 0xffffffff fail
  3513.     li $2 0
  3514.     not $3 $2
  3515.     bne $3 0xffffffff fail
  3516.     li $2 0xffffffff
  3517.     not $3 $2
  3518.     bne $3 0 fail
  3519.  
  3520.  
  3521.     .data
  3522. rem_:    .asciiz "Testing REM\n"
  3523.     .text
  3524.     li $v0 4    # syscall 4 (print_str)
  3525.     la $a0 rem_
  3526.     syscall
  3527.  
  3528.     li $2 5
  3529.     li $3 2
  3530.     li $4 -2
  3531.  
  3532.     rem $5 $2 $3
  3533.     bne $5 1 fail
  3534.  
  3535.     rem $5 $2 $4
  3536.     bne $5 1 fail
  3537.  
  3538.     .data
  3539. remu_:    .asciiz "Testing REMU\n"
  3540.     .text
  3541.     li $v0 4    # syscall 4 (print_str)
  3542.     la $a0 remu_
  3543.     syscall
  3544.  
  3545.     li $2 5
  3546.     li $3 2
  3547.     li $4 -2
  3548.  
  3549.     remu $5 $2 $3
  3550.     bne $5 1 fail
  3551.  
  3552.     remu $5 $2 $4
  3553.     bne $5 5 fail
  3554.  
  3555.  
  3556.     .data
  3557. rol_:    .asciiz "Testing ROL\n"
  3558.     .text
  3559.     li $v0 4    # syscall 4 (print_str)
  3560.     la $a0 rol_
  3561.     syscall
  3562.     li $2 5
  3563.     li $3 5
  3564.     rol $4 $2 $3
  3565.     bne $4 0xa0 fail
  3566.     li $2 5
  3567.     li $3 -5
  3568.     rol $4 $2 $3
  3569.     bne $4 0x28000000 fail
  3570.     li $2 5
  3571.     rol $4 $2 5
  3572.     bne $4 0xa0 fail
  3573.     li $2 5
  3574.     rol $4 $2 -5
  3575.     bne $4 0x28000000 fail
  3576.  
  3577.  
  3578.     .data
  3579. ror_:    .asciiz "Testing ROR\n"
  3580.     .text
  3581.     li $v0 4    # syscall 4 (print_str)
  3582.     la $a0 ror_
  3583.     syscall
  3584.     li $2 5
  3585.     li $3 5
  3586.     ror $4 $2 $3
  3587.     bne $4 0x28000000 fail
  3588.     li $2 5
  3589.     li $3 -5
  3590.     ror $4 $2 $3
  3591.     bne $4 0xa0 fail
  3592.     li $2 5
  3593.     ror $4 $2 5
  3594.     bne $4 0x28000000 fail
  3595.     li $2 5
  3596.     ror $4 $2 -5
  3597.     bne $4 0xa0 fail
  3598.  
  3599.  
  3600.     .data
  3601. s_s_:    .asciiz "Testing S_S\n"
  3602. foo:    .word 0
  3603.     .text
  3604.     li $v0 4    # syscall 4 (print_str)
  3605.     la $a0 s_s_
  3606.     syscall
  3607.  
  3608.     lw $2 fp_s1p5
  3609.     mtc1 $2 $0
  3610.     s.s $f0 foo
  3611.     lw $4 foo
  3612.     bne $2 $4 fail
  3613.  
  3614.     .data
  3615. s_d_:    .asciiz "Testing S_D\n"
  3616. bar:    .word 0 0
  3617.     .text
  3618.     li $v0 4    # syscall 4 (print_str)
  3619.     la $a0 s_d_
  3620.     syscall
  3621.  
  3622.     lw $2 fp_d1p5
  3623.     lw $3 fp_d1p5+4
  3624.     mtc1 $2 $0
  3625.     mtc1 $3 $1
  3626.     s.d $f0 bar
  3627.     lw $4 bar
  3628.     lw $5 bar+4
  3629.  
  3630.     bne $2 $4 fail
  3631.     bne $3 $5 fail
  3632.  
  3633.  
  3634.     .data
  3635. seq_:    .asciiz "Testing SEQ\n"
  3636.     .text
  3637.     li $v0 4    # syscall 4 (print_str)
  3638.     la $a0 seq_
  3639.     syscall
  3640.  
  3641.     li $2 -1
  3642.     li $3 1
  3643.  
  3644.     seq $4 $0 $0
  3645.     beqz $4 fail
  3646.     seq $4 $2 $3
  3647.     bnez $4 fail
  3648.  
  3649.     seq $4 $0 0
  3650.     beqz $4 fail
  3651.     seq $4 $3 2
  3652.     bnez $4 fail
  3653.  
  3654.  
  3655.     .data
  3656. sge_:    .asciiz "Testing SGE\n"
  3657.     .text
  3658.     li $v0 4    # syscall 4 (print_str)
  3659.     la $a0 sge_
  3660.     syscall
  3661.  
  3662.     sge $4 $0 $0
  3663.     beqz $4 fail
  3664.     li $2 1
  3665.     sge $4 $0 $2
  3666.     bnez $4 fail
  3667.     sge $4 $2 $0
  3668.     beqz $4 fail
  3669.     li $2 -1
  3670.     sge $4 $0 $2
  3671.     beqz $4 fail
  3672.     sge $4 $2 $0
  3673.     bnez $4 fail
  3674.  
  3675.     li $2 1
  3676.     sge $2 $0 $2
  3677.     bnez $2 fail
  3678.     li $2 1
  3679.     sge $2 $2 $0
  3680.     beqz $2 fail
  3681.     li $2 -1
  3682.     sge $2 $0 $2
  3683.     beqz $2 fail
  3684.     li $2 -1
  3685.     sge $2 $2 $0
  3686.     bnez $2 fail
  3687.  
  3688.     sge $4 $0 0
  3689.     beqz $4 fail
  3690.     li $2 1
  3691.     sge $4 $0 1
  3692.     bnez $4 fail
  3693.     sge $4 $2 0
  3694.     beqz $4 fail
  3695.     li $2 -1
  3696.     sge $4 $0 -1
  3697.     beqz $4 fail
  3698.     sge $4 $2 0
  3699.     bnez $4 fail
  3700.  
  3701.  
  3702.     .data
  3703. sgeu_:    .asciiz "Testing SGEU\n"
  3704.     .text
  3705.     li $v0 4    # syscall 4 (print_str)
  3706.     la $a0 sgeu_
  3707.     syscall
  3708.  
  3709.     sgeu $4 $0 $0
  3710.     beqz $4 fail
  3711.     li $2 1
  3712.     sgeu $4 $0 $2
  3713.     bnez $4 fail
  3714.     sgeu $4 $2 $0
  3715.     beqz $4 fail
  3716.     li $2 -1
  3717.     sgeu $4 $0 $2
  3718.     bnez $4 fail
  3719.     sgeu $4 $2 $0
  3720.     beqz $4 fail
  3721.  
  3722.     sgeu $4 $0 0
  3723.     beqz $4 fail
  3724.     li $2 1
  3725.     sgeu $4 $0 1
  3726.     bnez $4 fail
  3727.     sgeu $4 $2 0
  3728.     beqz $4 fail
  3729.     li $2 -1
  3730.     sgeu $4 $0 -1
  3731.     bnez $4 fail
  3732.     sgeu $4 $2 0
  3733.     beqz $4 fail
  3734.  
  3735.  
  3736.     .data
  3737. sgt_:    .asciiz "Testing SGT\n"
  3738.     .text
  3739.     li $v0 4    # syscall 4 (print_str)
  3740.     la $a0 sgt_
  3741.     syscall
  3742.  
  3743.     sgt $4 $0 $0
  3744.     bnez $4 fail
  3745.     li $2 1
  3746.     sgt $4 $0 $2
  3747.     bnez $4 fail
  3748.     sgt $4 $2 $0
  3749.     beqz $4 fail
  3750.     li $2 -1
  3751.     sgt $4 $0 $2
  3752.     beqz $4 fail
  3753.     sgt $4 $2 $0
  3754.     bnez $4 fail
  3755.  
  3756.     sgt $4 $0 0
  3757.     bnez $4 fail
  3758.     sgt $4 $0 1
  3759.     bnez $4 fail
  3760.     li $2 1
  3761.     sgt $4 $2 0
  3762.     beqz $4 fail
  3763.     sgt $4 $0 -1
  3764.     beqz $4 fail
  3765.     li $2 -1
  3766.     sgt $4 $2 0
  3767.     bnez $4 fail
  3768.  
  3769.     .data
  3770. sgtu_:    .asciiz "Testing SGTU\n"
  3771.     .text
  3772.     li $v0 4    # syscall 4 (print_str)
  3773.     la $a0 sgtu_
  3774.     syscall
  3775.  
  3776.     sgtu $4 $0 $0
  3777.     bnez $4 fail
  3778.     li $2 1
  3779.     sgtu $4 $0 $2
  3780.     bnez $4 fail
  3781.     sgtu $4 $2 $0
  3782.     beqz $4 fail
  3783.     li $2 -1
  3784.     sgtu $4 $0 $2
  3785.     bnez $4 fail
  3786.     sgtu $4 $2 $0
  3787.     beqz $4 fail
  3788.  
  3789.     sgtu $4 $0 0
  3790.     bnez $4 fail
  3791.     sgtu $4 $0 1
  3792.     bnez $4 fail
  3793.     li $2 1
  3794.     sgtu $4 $2 0
  3795.     beqz $4 fail
  3796.     sgtu $4 $0 -1
  3797.     bnez $4 fail
  3798.     li $2 -1
  3799.     sgtu $4 $2 0
  3800.     beqz $4 fail
  3801.  
  3802.  
  3803.     .data
  3804. sle_:    .asciiz "Testing SLE\n"
  3805.     .text
  3806.     li $v0 4    # syscall 4 (print_str)
  3807.     la $a0 sle_
  3808.     syscall
  3809.  
  3810.     sle $4 $0 $0
  3811.     beqz $4 fail
  3812.     li $2 1
  3813.     sle $4 $0 $2
  3814.     beqz $4 fail
  3815.     sle $4 $2 $0
  3816.     bnez $4 fail
  3817.     li $2 -1
  3818.     sle $4 $0 $2
  3819.     bnez $4 fail
  3820.     sle $4 $2 $0
  3821.     beqz $4 fail
  3822.  
  3823.     li $2 1
  3824.     sle $2 $0 $2
  3825.     beqz $2 fail
  3826.     li $2 1
  3827.     sle $2 $2 $0
  3828.     bnez $2 fail
  3829.     li $2 -1
  3830.     sle $2 $0 $2
  3831.     bnez $2 fail
  3832.     li $2 -1
  3833.     sle $2 $2 $0
  3834.     beqz $2 fail
  3835.  
  3836.     sle $4 $0 0
  3837.     beqz $4 fail
  3838.     li $2 1
  3839.     sle $4 $0 1
  3840.     beqz $4 fail
  3841.     sle $4 $2 0
  3842.     bnez $4 fail
  3843.     li $2 -1
  3844.     sle $4 $0 -1
  3845.     bnez $4 fail
  3846.     sle $4 $2 0
  3847.     beqz $4 fail
  3848.  
  3849.  
  3850.     .data
  3851. sleu_:    .asciiz "Testing SLEU\n"
  3852.     .text
  3853.     li $v0 4    # syscall 4 (print_str)
  3854.     la $a0 sleu_
  3855.     syscall
  3856.  
  3857.     sleu $4 $0 $0
  3858.     beqz $4 fail
  3859.     li $2 1
  3860.     sleu $4 $0 $2
  3861.     beqz $4 fail
  3862.     sleu $4 $2 $0
  3863.     bnez $4 fail
  3864.     li $2 -1
  3865.     sleu $4 $0 $2
  3866.     beqz $4 fail
  3867.     sleu $4 $2 $0
  3868.     bnez $4 fail
  3869.  
  3870.     sleu $4 $0 0
  3871.     beqz $4 fail
  3872.     li $2 1
  3873.     sleu $4 $0 1
  3874.     beqz $4 fail
  3875.     sleu $4 $2 0
  3876.     bnez $4 fail
  3877.     li $2 -1
  3878.     sleu $4 $0 -1
  3879.     beqz $4 fail
  3880.     sleu $4 $2 0
  3881.     bnez $4 fail
  3882.  
  3883.  
  3884.     .data
  3885. sne_:    .asciiz "Testing SNE\n"
  3886.     .text
  3887.     li $v0 4    # syscall 4 (print_str)
  3888.     la $a0 sne_
  3889.     syscall
  3890.  
  3891.     li $2 -1
  3892.     li $3 1
  3893.  
  3894.     sne $4 $0 $0
  3895.     bnez $4 fail
  3896.     sne $4 $2 $3
  3897.     beqz $4 fail
  3898.  
  3899.     sne $4 $0 0
  3900.     bnez $4 fail
  3901.     sne $4 $3 2
  3902.     beqz $4 fail
  3903.  
  3904.  
  3905.     .data
  3906. ulh_:    .asciiz "Testing ULH\n"
  3907. ulh1_:    .byte 1 2 3 4 5 6 7 8
  3908. ulh2_:    .byte 0xff 0xff
  3909.     .text
  3910.  
  3911.     li $v0 4    # syscall 4 (print_str)
  3912.     la $a0 ulh_
  3913.     syscall
  3914.     la $2 ulh1_
  3915.     ulh $3 0($2)
  3916.     bne $3 0x0201 fail
  3917.     ulh $3 1($2)
  3918.     bne $3 0x0302 fail
  3919.     ulh $3 2($2)
  3920.     bne $3 0x0403 fail
  3921.     ulh $3 3($2)
  3922.     bne $3 0x0504 fail
  3923.     ulh $3 4($2)
  3924.     bne $3 0x0605 fail
  3925.     la $2 ulh2_
  3926.     ulh $3 0($2)
  3927.     bne $3 -1 fail
  3928.  
  3929.  
  3930.     .data
  3931. ulhu_:    .asciiz "Testing ULHU\n"
  3932.     .text
  3933.     li $v0 4    # syscall 4 (print_str)
  3934.     la $a0 ulhu_
  3935.     syscall
  3936.  
  3937.     li $v0 4    # syscall 4 (print_str)
  3938.     la $a0 ulhu_
  3939.     syscall
  3940.     la $2 ulh1_
  3941.     ulhu $3 0($2)
  3942.     bne $3 0x0201 fail
  3943.     ulhu $3 1($2)
  3944.     bne $3 0x0302 fail
  3945.     ulhu $3 2($2)
  3946.     bne $3 0x0403 fail
  3947.     ulhu $3 3($2)
  3948.     bne $3 0x0504 fail
  3949.     ulhu $3 4($2)
  3950.     bne $3 0x0605 fail
  3951.     la $2 ulh2_
  3952.     ulhu $3 0($2)
  3953.     bne $3 0xffff fail
  3954.  
  3955.  
  3956.     .data
  3957. ulw_:    .asciiz "Testing ULW\n"
  3958.     .text
  3959.     li $v0 4    # syscall 4 (print_str)
  3960.     la $a0 ulw_
  3961.     syscall
  3962.  
  3963.     la $2 ulh1_
  3964.     ulw $3 0($2)
  3965.     bne $3 0x04030201 fail
  3966.     ulw $3 1($2)
  3967.     bne $3 0x05040302 fail
  3968.     ulw $3 2($2)
  3969.     bne $3 0x06050403 fail
  3970.     ulw $3 3($2)
  3971.     bne $3 0x07060504 fail
  3972.  
  3973.  
  3974.     .data
  3975. ush_:    .asciiz "Testing USH\n"
  3976. ushd:    .word 0 0
  3977.     .text
  3978.     li $v0 4    # syscall 4 (print_str)
  3979.     la $a0 ush_
  3980.     syscall
  3981.  
  3982.     la $2 ushd
  3983.     sw $0 0($2)
  3984.     sw $0 4($2)
  3985.     li $3 -1
  3986.     ush $3 0($2)
  3987.     lw $4 0($2)
  3988.     bne $4 0xffff fail
  3989.     lw $4 4($2)
  3990.     bne $4 0 fail
  3991.  
  3992.     sw $0 0($2)
  3993.     sw $0 4($2)
  3994.     li $3 -1
  3995.     ush $3 1($2)
  3996.     lw $4 0($2)
  3997.     bne $4 0xffff00 fail
  3998.     lw $4 4($2)
  3999.     bne $4 0 fail
  4000.  
  4001.     sw $0 0($2)
  4002.     sw $0 4($2)
  4003.     li $3 -1
  4004.     ush $3 2($2)
  4005.     lw $4 0($2)
  4006.     bne $4 0xffff0000 fail
  4007.     lw $4 4($2)
  4008.     bne $4 0 fail
  4009.  
  4010.     sw $0 0($2)
  4011.     sw $0 4($2)
  4012.     li $3 -1
  4013.     ush $3 3($2)
  4014.     lw $4 0($2)
  4015.     bne $4 0xff000000 fail
  4016.     lw $4 4($2)
  4017.     bne $4 0xff fail
  4018.  
  4019.  
  4020.     .data
  4021. usw_:    .asciiz "Testing USW\n"
  4022.     .text
  4023.     li $v0 4    # syscall 4 (print_str)
  4024.     la $a0 usw_
  4025.     syscall
  4026.  
  4027.     la $2 ushd
  4028.     sw $0 0($2)
  4029.     sw $0 4($2)
  4030.     li $3 -1
  4031.     usw $3 0($2)
  4032.     lw $4 0($2)
  4033.     bne $4 -1 fail
  4034.     lw $4 4($2)
  4035.     bne $4 0 fail
  4036.  
  4037.     sw $0 0($2)
  4038.     sw $0 4($2)
  4039.     li $3 -1
  4040.     usw $3 1($2)
  4041.     lw $4 0($2)
  4042.     bne $4 0xffffff00 fail
  4043.     lw $4 4($2)
  4044.     bne $4 0xff fail
  4045.  
  4046.     sw $0 0($2)
  4047.     sw $0 4($2)
  4048.     li $3 -1
  4049.     usw $3 2($2)
  4050.     lw $4 0($2)
  4051.     bne $4 0xffff0000 fail
  4052.     lw $4 4($2)
  4053.     bne $4 0xffff fail
  4054.  
  4055.     sw $0 0($2)
  4056.     sw $0 4($2)
  4057.     li $3 -1
  4058.     usw $3 3($2)
  4059.     lw $4 0($2)
  4060.     bne $4 0xff000000 fail
  4061.     lw $4 4($2)
  4062.     bne $4 0xffffff fail
  4063.  
  4064.  
  4065.     .data
  4066. word_:    .asciiz "Testing .WORD\n"
  4067.     .text
  4068.     li $v0 4    # syscall 4 (print_str)
  4069.     la $a0 word_
  4070.     syscall
  4071.  
  4072.     .data
  4073.     .align 0
  4074. wordd:    .byte 0x1
  4075.     .word 0x2345678
  4076.     .word 0x9abcdef
  4077.     .text
  4078.     la $2 wordd
  4079.     lwr $3 1($2)
  4080.     lwl $3 4($2)
  4081.     bne $3 0x2345678 fail
  4082.     lwr $3 5($2)
  4083.     lwl $3 8($2)
  4084.     bne $3 0x9abcdef fail
  4085.  
  4086.     .data
  4087.     .byte 0
  4088. x:    .word OK    # Forward reference in unaligned data!
  4089.     .text
  4090.     lw $8 x
  4091.     beq $8 $0 fail
  4092. OK:
  4093.  
  4094.  
  4095. # Done !!!
  4096.     .data
  4097. sm:    .asciiz "\nPassed all tests\n"
  4098.     .text
  4099.     li $v0 4    # syscall 4 (print_str)
  4100.     la $a0 sm
  4101.     syscall
  4102.     lw $31 saved_ret_pc
  4103.     jr $31        # Return from main
  4104.  
  4105.  
  4106.     .data
  4107. fm:    .asciiz "Failed test\n"
  4108.     .text
  4109. fail:    li $v0 4    # syscall 4 (print_str)
  4110.     la $a0 fm
  4111.     syscall
  4112.     li $v0, 10    # syscall 10 (exit)
  4113.     syscall
  4114.  
  4115.  
  4116.     .text 0x408000
  4117. far_away:
  4118.     beq $0, $0, come_back
  4119.